例子
class A:
def __init__(self, var1):
self.var1 = var1
self.__var2 = var1
def get(self):
return self.var2
def get2(self, var):
return getattr(self, var)
instance = A("123")
a = instance.var1
b = instance.get()
c = instance.get2("var2")
从灵活性角度来讲, a=c>b ,
从速度来讲 b 的耗时约是 a 的 1.5 倍, c 的耗时约是 a 的 2.5 倍,
从代码健壮性角度来看,也许是反过来的。
Q1 假如我把这个操作封装在某个函数里,那么,在那个函数里还有必要做这种访问限制吗?
Q2 在使用者能获取到源代码的情况下,有必要做这样的限制吗?
Q3 一般什么样的实际情况下才会添加这种访问限制?
1
Sunyanzi 2016-05-16 04:08:18 +08:00 1
Q1 如果你问的是「封装在一个类里」那么答案是没必要 ... 随便一个成员方法都可以绕过的限制毫无意义 ...
Q2 答案是有必要 ... 获取到源代码并不代表可以获取变量的值 ... 想要变量不被不当获取只能做访问限制 ... Q3 访问限制的意义在于设置一个变量只能在某些既定的场景里被读或修改 ... 比如变量只在当前类中使用那么就该设置为 Private ... 如果需要外部对这个变量只读就封装一个函数返回变量值 ... 如果需要外部可以读写这个变量那么就设置为 Public ... 如果仅限当前类和他的孩子们读写就设置为 Protected ... 顺带一提 ... 你的 get 和 get2 方法如果是我我会封装成一个 getter ... 参见 @property 装饰器 ... |
2
jixiangqd 2016-05-16 08:43:15 +08:00
讨论性能比较扯淡,要性能请选择 C ,所以性能根本不是不使用封装的理由。
所以,根据实际情况选择合适的封装才是正确的做法,可读性,可维护性>>>>>>>>>所谓的性能。 |
3
PyHub 2016-05-16 11:44:47 +08:00 via iPhone
好好的 Python 用成了 Java
|