在python中运行时覆盖方法

时间:2010-05-10 13:21:45

标签: 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)
    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 个答案:

答案 0 :(得分:4)

以双下划线开头的类中的属性是名称错误的。除非你确定需要它们,否则不要使用它们。关于它们没有任何私密性,所以你应该使用单个下划线。

您遇到此问题的原因是a2()中的属性访问权限名称已损坏。