2

subclass(object)のように内部クラスを継承することは可能ですか? たとえば、以下のコードでどのようにしますか?

class main:
    class sub(main):
        def __init__(self):
            print(main.foo)
    def __init__(self):
        self.foo = "bar"
        baz = self.sub()

if __name__ == '__main__':
    bar = main()
4

1 に答える 1

1

特に、メインとサブのインスタンスを「ネスト」したいのか、それとも実際にネストされたクラスが必要なのか、これは非常に珍しいことです。囲んでいるクラスをサブクラス化するネストされたクラスを持つことはできません

シンプルな構成で、あなたがやろうとしていると私が思うことを再現できます:

class Main(object):
    def __init__(self):
        self.foo = 'bar'
        baz = Helper(self)

class Helper(object):
    def __init__(self, parent):
        self.parent = parent  
        print(parent.foo) # Access to members of Main through parent reference

if __name__ == "__main__":
    x = Main()

サブクラスではなく、単なるヘルパー クラスであるため、補助クラス ヘルパーを呼び出しました。これは少し疑わしいです。これら 2 つのクラスが非常に緊密に結合されている場合、それらの間に常に 1:1 の関係があり、両方が他方への参照を保持する必要があります。なぜそれらが別のクラスであるかは明らかではありません。通常の継承で同様のことを行うこともできます。これは、あなたが望むものにより近いと思います。

class Main(object):
    def __init__(self):
        self.foo = 'bar'
class Sub(main):
    def __init__(self):
        super(Sub, self).__init__()
        print(self.foo)  # All attributes defined by main exist in sub
if __name__ == "__main__":
    Sub()

メイン クラスからのすべての動作とそれ自身の動作を含むサブ オブジェクトを作成していることに注意してください。とにかく、これが役立つことを願っています。質問を更新して、必要な動作がこれらとどのように異なるかを説明できる場合は、そこから進むことができます.

于 2013-11-14T05:30:03.907 に答える