在Python中从父类调用方法

时间:2013-07-17 19:54:40

标签: python class inheritance methods attributeerror

任何人都可以帮助我使用正确的语法从父类调用我的方法__get_except_lines(...)吗?

我有一个类,其方法如下所示。这个特殊的方法有两个下划线,因为我不希望“用户”使用它。

NewPdb(object)
    myvar = ...
    ...
    def __init__(self):
        ...
    def __get_except_lines(self,...):
        ...

在一个单独的文件中,我有另一个继承自这个类的类。

from new_pdb import NewPdb

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

我得到一个让我感到困惑的属性错误:

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

3 个答案:

答案 0 :(得分:1)

您的问题是由私有变量(http://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references)的Python名称修改引起的。你应该写:

NewPdb._NewPdb__get_except_lines(...)

答案 1 :(得分:0)

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

e.g。

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

答案 2 :(得分:0)

在名称前放置双下划线的全部意义在于防止在子类中调用它。见http://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references

如果你想这样做,那么不要用双下划线命名它(你可以使用单个下划线),或者在基类上为名称创建一个别名(因此再次违背了目的)。