我正在使用第三方Python库(wxPython),该库在其模块之一中具有错误类。有问题的代码部分如下所示:
def OnText(self, event):
value = self.GetValue()
if value != self.__oldvalue:
pass # Here some more code follows ...
self.__oldvalue = value
问题是if
语句,因为在第一次调用此方法时self.__oldvalue
尚未初始化。因此,对于解决方法,直到库开发人员已修复此错误,我认为我可以通过一些解决方法来解决此问题。我只是想从该错误的类派生一个子类,并在此构造函数中初始化self.__oldvalue
:
class MyIntCtrl(wx.lib.intctrl.IntCtrl):
def __init__(self, *args, **kw):
self.__oldvalue = None
super().__init__(*args, **kw)
但是,现在当我使用这个新的类MyIntCtrl
而不是原始的IntCtrl
类时,确实出现了与以前完全相同的错误:
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/wx/lib/intctrl.py", line 509, in OnText
if value != self.__oldvalue:
AttributeError: 'MyIntCtrl' object has no attribute '_IntCtrl__oldvalue'
现在,我想知道:我做错了什么,还可以在子班级解决这个问题吗?
任何以__
(双下划线)开头的类的成员都是私有的,可以在命名中使用单个下划线,也可以不使用下划线在派生类中访问它们。
class Parent:
def __init__(self):
self._field = "field"
class Child(Parent):
def __init__(self):
pass
def do(self):
print(self._field) # It will not throw exception