我试图在Python中修补一个对象。
class C:
def __init__(self):
self.__n = 0
def f(self):
self.__n += 1
def __str__(self):
return str(self.__n)
c = C()
def up(self):
self.__n += 2
import types
c.up = types.MethodType(up, c)
c.up()
但我得到了一个AttributeError
Traceback (most recent call last):
File "untitled4.py", line 19, in <module>
c.up()
File "untitled4.py", line 15, in up
self.__n += 2
AttributeError: 'C' object has no attribute '__n'
如何解决错误?
答案 0 :(得分:1)
由于您的up
函数未在类中声明,因此无法将name mangling规则应用于其本地,同时将其应用于属性名称。因此,您需要在函数中手动应用名称修改:
def up(self):
self._C__n += 2