我有多次运行的方法。我不想嵌入ifs而是想覆盖方法然后运行它。我知道我可以通过简单的配置来覆盖类方法,但是覆盖方法看不到私有成员:
class X:
def __init__(self, a):
self.a = a
self.__b = a
def m(self):
print self.a
print self.__b
def a2(self):
print (2*self.a)
print (2*self.__b)
x = X(2)
x.m()
X.m = a2
x.m()
输出:
2
2
4
Traceback (most recent call last):
File "t.py", line 17, in <module>
x.m()
File "t.py", line 12, in a2
print (2*self.__b)
AttributeError: X instance has no attribute '__b'
有没有机会解决这个问题?谷歌没有给出答案:(
答案 0 :(得分:4)
以双下划线开头的类中的属性是名称错误的。除非你确定需要它们,否则不要使用它们。关于它们没有任何私密性,所以你应该使用单个下划线。
您遇到此问题的原因是a2()
中的属性访问权限不名称已损坏。