Python でネストされたクラスを実装する方法

WBOY
リリース: 2023-05-13 08:43:05
転載
1873 人が閲覧しました

Q: Python クラスでクラスを作成できますか?

A: はい、Python のクラスには他のクラスを含めることができます。これらのクラスは、ネストされたクラスまたはネストされた型と呼ばれます。クラス内でネストされたクラスを定義するための構文は、モジュール内でクラスを定義する場合と同じです。たとえば、次はネストされたクラスを含む例です。

class OuterClass:
    def __init__(self):
        self.inner = self.InnerClass()

    class InnerClass:
        def __init__(self):
            self.inner_var = 42

outer = OuterClass()
print(outer.inner.inner_var) # 输出:42
ログイン後にコピー

この例では、OuterClass にはネストされたクラス InnerClass が含まれており、InnerClass のインスタンスは、OuterClass のコンストラクターで初期化されます。 InnerClass のメンバー変数 inner_var には、outer.inner.inner_var にアクセスすることでアクセスできます。

ネストされたクラスとその外部クラスとの間に特別なアクセス制限はなく、相互にメンバー変数およびメソッドにアクセスできることに注意してください。さらに、ネストされたクラスは静的または動的にすることもできます (つまり、インスタンス メソッドを含めることも、含めないこともできます)。

Q: InnerClass は外部クラスのメンバー変数にどのようにアクセスしますか?

A: Python では、ネストされたクラスは、外部クラス名.メンバー変数名を通じて外部クラスのメンバー変数にアクセスできます。たとえば、前の例で、InnerClass がOuterClass のメンバー変数 external_var にアクセスできるようにする場合は、次のようにコードを変更できます。

class OuterClass:
    def __init__(self):
        self.outer_var = 100
        self.inner = self.InnerClass()

    class InnerClass:
        def __init__(self):
            outer_var = OuterClass.outer_var
            print(outer_var)

outer = OuterClass() # 输出:100
ログイン後にコピー

この例では、InnerClass のコンストラクターは、OuterClass.outer_var メソッドを渡します。は、OuterClass のメンバー変数 external_var にアクセスします。外部クラスのメンバー変数にアクセスする場合、ネストされたクラスと外部クラスは 2 つの異なるクラスであるため、自分自身ではなく外部クラスの名前を使用する必要があることに注意してください。

Q: たとえば、A が B をネストする場合、B の関数で新しい B オブジェクトを作成するにはどうすればよいですか?

A: クラス B がクラス A で定義されている場合は、「新しい B の作成」でB の関数内のオブジェクトは、次の方法で実現できます。

class A:
    class B:
        def __init__(self, val):
            self.val = val

        def create_new_b(self, val):
            new_b = A.B(val)
            return new_b

a = A()
b = a.B(1)
new_b = b.create_new_b(2)
print(b.val)  # 输出 1
print(new_b.val)  # 输出 2
ログイン後にコピー

この例では、A にはネストされたクラス B が含まれており、B のコンストラクター init はパラメーター val を受け取ります。クラス B には、create_new_b という名前のメソッドも含まれています。このメソッドは、パラメーター val を受け取り、A.B(val) を使用して新しいクラス B オブジェクトを作成します。 create_new_b メソッドは、新しく作成された B オブジェクトを返します。新しいクラス B オブジェクトは、 b.create_new_b(2) メソッドを呼び出すことで作成できます。ここで、 b はクラス A オブジェクト内のクラス B インスタンスです。

クラス B オブジェクトを作成するときは、B の代わりに A.B を使用する必要があることに注意してください。これは、B がグローバル名前空間ではなく A にネストされているためです。

以上がPython でネストされたクラスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート