在Python中运行时重写方法
我有一个方法需要运行很多次。我不想把很多if语句嵌套在里面,而是想重写这个方法,然后再运行它。我知道可以通过简单的赋值来重写类的方法,但重写后的方法看不到私有成员。
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'
有没有办法解决这个问题?谷歌没有显示答案 :(
1 个回答
4
在类里面,以双下划线开头的属性会被特殊处理,这种处理叫做名称改编。除非你非常确定需要使用它们,否则最好不要用。其实它们并不是私有的,所以你可以用一个下划线来代替。
你遇到这个问题的原因是因为在 a2()
里面访问的属性并没有经过名称改编。