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

あなたの問題は、プライベート変数の Python 名マングリング ( http://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references ) が原因です。あなたは書くべきです:

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

名前の前にアンダースコアを 2 つ付けるのは、その名前が子クラスで呼び出されないようにするためです。http://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-referencesを参照してください

これを行う場合は、アンダースコアを 2 つ使用して名前を付けたり (アンダースコアを 1 つ使用できます)、基本クラスで名前のエイリアスを作成したりしないでください (これにより、再び目的が失われます)。

于 2013-07-17T20:15:38.507 に答える