python中的运行时覆盖方法
我有一个运行多次的方法。我不想在内部嵌套ifs,而是想覆盖方法,然后运行它。我知道我可以通过简单的赋值覆盖类方法,但覆盖的方法看不到私有成员:python中的运行时覆盖方法,python,oop,Python,Oop,我有一个运行多次的方法。我不想在内部嵌套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)
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'
有解决这个问题的机会吗?Google没有显示答案:类中以双下划线开头的属性被名称损坏。除非你确定你需要它们,否则不要使用它们。它们没有任何私密性,因此应该使用一个下划线
出现此问题的原因是a2中的属性访问没有名称损坏。以双下划线开头的类中的属性是名称损坏的。除非你确定你需要它们,否则不要使用它们。它们没有任何私密性,因此应该使用一个下划线
出现此问题的原因是a2中的属性访问没有名称损坏。我知道python会将uu var的名称更改为u ClassName var,但我认为这是python处理私有成员的方式。python中没有私有成员这样的东西。您所能做的就是给出强烈的提示,不要随意操纵成员。我知道python会将_var的名称更改为_ClassName_var,但我认为这是python处理私有成员的方式。python中没有私有成员这样的东西。你所能做的就是给一个强烈的暗示,一个成员不应该被随意操纵。