在父类中使用的子类中初始化属性

问题描述 投票:0回答:1

我正在使用第三方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'

现在,我想知道:我做错了什么,还可以在子班级解决这个问题吗?

python python-3.x inheritance wxpython
1个回答
0
投票

任何以__(双下划线)开头的类的成员都是私有的,可以在命名中使用单个下划线,也可以不使用下划线在派生类中访问它们。

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
© www.soinside.com 2019 - 2024. All rights reserved.