python中的运行时覆盖方法

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)

我有一个运行多次的方法。我不想在内部嵌套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'

有解决这个问题的机会吗?Google没有显示答案:

类中以双下划线开头的属性被名称损坏。除非你确定你需要它们,否则不要使用它们。它们没有任何私密性,因此应该使用一个下划线


出现此问题的原因是a2中的属性访问没有名称损坏。

以双下划线开头的类中的属性是名称损坏的。除非你确定你需要它们,否则不要使用它们。它们没有任何私密性,因此应该使用一个下划线


出现此问题的原因是a2中的属性访问没有名称损坏。

我知道python会将uu var的名称更改为u ClassName var,但我认为这是python处理私有成员的方式。python中没有私有成员这样的东西。您所能做的就是给出强烈的提示,不要随意操纵成员。我知道python会将_var的名称更改为_ClassName_var,但我认为这是python处理私有成员的方式。python中没有私有成员这样的东西。你所能做的就是给一个强烈的暗示,一个成员不应该被随意操纵。