Метод перезаписи во время выполнения в python - PullRequest
1 голос
/ 10 мая 2010

У меня есть метод, который запускается много раз.Я не хочу вкладывать 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 не показывает ответ: (

1 Ответ

4 голосов
/ 10 мая 2010

Атрибуты в классах, которые начинаются с двойного подчеркивания, искажены по имени. Никогда не используйте их, если вы не уверены, что они вам нужны. В них нет ничего закрытого, поэтому вместо них следует использовать одно подчеркивание.

Причиной возникновения этой проблемы является то, что доступ к атрибуту в a2() является , а не по имени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...