Python 構文では、クラス内でクラスを定義できます。これは、ネストされたクラスまたは内部クラスと呼ばれます。Python では、クラスをオブジェクトとして扱うことができるため、クラスの定義内に他のクラスを作成できます。
ネストされたクラスの定義は外部クラスのスコープ内で行われ、ネストされたクラスは外部クラスのプロパティとメソッドにアクセスできます。ネストされたクラスは、通常のクラスと同様にプロパティ、メソッド、特殊メソッドを定義でき、インスタンス化して使用できます。
以下は、Python のクラス内でネストされたクラスを定義する方法を示す簡単なコード例です。
class OuterClass:
outer_var = 10
def outer_method(self):
print("This is the outer method")
class NestedClass:
nested_var = 20
def nested_method(self):
print("This is the nested method")
上の例では、OuterClass
外部クラスはNestedClass
ネストされたクラスです。ネストされたクラスを通常のクラスと同じように使用できます。
# 创建外部类对象
outer_obj = OuterClass()
# 创建嵌套类对象
nested_obj = OuterClass.NestedClass()
# 访问外部类属性和方法
print(outer_obj.outer_var) # 输出: 10
outer_obj.outer_method() # 输出: This is the outer method
# 访问嵌套类属性和方法
print(nested_obj.nested_var) # 输出: 20
nested_obj.nested_method() # 输出: This is the nested method
ネストされたクラスを使用すると、コードを整理し、関連するクラスをまとめて保持し、コードをより読みやすく、保守しやすくすることができます。ネストされたクラスは必須ではありませんが、ネストされたクラスを使用するかどうかは、特定の設計要件とコード構造に従って決定されることに注意してください。
また、入れ子になったクラスでは外部クラスのプロパティやメソッドを直接使用することができないので、使用したい場合は以下の手順に従ってください。
ネストされたクラス内の外部クラスのプロパティにアクセスする場合は、外部クラスのインスタンスをパラメーターとして渡すか、その他の方法で、外部クラスのプロパティをネストされたクラスに渡すことができます。変更されたサンプルコードは次のとおりです。
class OuterClass:
outer_var = 10
def outer_method(self):
print("This is the outer method")
class NestedClass:
def __init__(self, outer_instance):
self.outer_instance = outer_instance
def nested_method(self):
print("This is the nested method")
print("Outer var:", self.outer_instance.outer_var)
outer_instance
この例では、外部クラスのインスタンスをパラメーターとしてネストされたクラスのコンストラクターに渡し__init__
、それをネストされたクラスのプロパティとして保存することでこれを行いますself.outer_instance
。次に、ネストされたクラスのメソッドで、self.outer_instance.outer_var
外部クラスのプロパティにアクセスするために使用できます。
次に、変更されたコード例を使用してテストしてみましょう。
# 创建外部类对象
outer_obj = OuterClass()
# 创建嵌套类对象,并传递外部类实例
nested_obj = OuterClass.NestedClass(outer_obj)
# 访问嵌套类方法
nested_obj.nested_method()
出力は次のようになります。
This is the nested method
Outer var: 10
このようにして、ネストされたクラス内の外部クラスのプロパティに正常にアクセスできます。ネストされたクラスを使用する場合、特定の要件と設計に従って、ネストされたクラス内の外部クラスのプロパティにアクセスするかどうかを決定し、そのようなアクセスを実現するための適切な方法を選択する必要があることに注意してください。
上記のコードに関して:
self.outer_instance = outer_instance
詳細な説明については、ブログ投稿「
Python クラスのコンストラクターの変数は通常 "self." の前にあるのはなぜですか?」を参照してください。