2

谁能帮助我使用正确的语法__get_except_lines(...)从父类调用我的方法?

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

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'
4

3 回答 3

1

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

NewPdb._NewPdb__get_except_lines(...)
于 2013-07-17T20:04:20.710 回答
0

将双下划线放在名称前面的全部目的是防止它在子类中被调用。请参阅http://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references

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

于 2013-07-17T20:15:38.507 回答
0
super(<your_class_name>, self).<method_name>(args)

例如

super(PdbLig, self).__get_except_lines(...)
于 2013-07-17T19:57:22.037 回答