在Python中从父类调用方法

Calling a method from a parent class in Python

有人能帮我用正确的语法从父类调用方法__get_except_lines(...)吗?

我有一个具有如下所示方法的类。这个特定的方法有2个下划线,因为我不希望"用户"使用它。

1
2
3
4
5
6
7
NewPdb(object)
    myvar = ...
    ...
    def __init__(self):
        ...
    def __get_except_lines(self,...):
        ...

在另一个文件中,我有另一个类继承了这个类。

1
2
3
4
5
6
7
from new_pdb import NewPdb

    PdbLig(NewPdb):
        def __init__(self):
            ....
            self.cont = NewPdb.myvar
            self.cont2 = NewPdb.__get_except_lines(...)

我得到一个属性错误,这让我很困惑:

1
AttributeError: type object 'NewPdb' has no attribute '_PdbLig__get_except_lines'


您的问题是由于私有变量(http://docs.python.org/2/tutorial/classes.html私有变量和类本地引用)的python名称管理造成的。你应该写:

1
NewPdb._NewPdb__get_except_lines(...)


将双下划线放在名称前面的整个要点是防止在子类中调用它。参见http://docs.python.org/2/tutorial/classes.html私有变量和类本地引用

如果您想这样做,那么不要用双下划线来命名它(您可以使用一个下划线),也不要为基类上的名称创建别名(这样又会破坏目的)。


1
super(<your_class_name>, self).<method_name>(args)

例如

1
super(PdbLig, self).__get_except_lines(...)