python 多重継承クラスの親クラスの引数の問題をどのように解決しますか
Pythonで複数の親クラスを1つのクラスが継承した場合、同じメソッド名や属性名の衝突が発生することがあります。この解決方法として、以下の方法があります。
- 名前の衝突を解決する方法または属性:サブレースで同じ名前的方法または属性を再定義することで衝突を回避できます。
class Parent1:
def __init__(self):
self.value = 1
class Parent2:
def __init__(self):
self.value = 2
class Child(Parent1, Parent2):
def __init__(self):
super().__init__() # 调用第一个父类的初始化方法
self.new_value = 3
child = Child()
print(child.value) # 输出1,即来自Parent1的value
print(child.new_value) # 输出3
- 親クラスのメソッドを呼び出して解決する:親クラスのメソッドを呼び出して競合のプロパティを取得したり、競合のメソッドを呼び出すことができます。
class Parent1:
def __init__(self):
self.value = 1
def method(self):
print("Parent1's method")
class Parent2:
def __init__(self):
self.value = 2
def method(self):
print("Parent2's method")
class Child(Parent1, Parent2):
def __init__(self):
super().__init__() # 调用第一个父类的初始化方法
self.new_value = 3
def method(self):
super().method() # 调用第一个父类的method方法
child = Child()
print(child.value) # 输出1,即来自Parent1的value
print(child.new_value) # 输出3
child.method() # 输出"Parent1's method"
- super()
- スーパークラスコンストラクタコール
class Parent1:
def __init__(self):
self.value = 1
def method(self):
print("Parent1's method")
class Parent2:
def __init__(self):
self.value = 2
def method(self):
print("Parent2's method")
class Child(Parent1, Parent2):
def __init__(self):
super().__init__() # 调用第一个父类的初始化方法
self.new_value = 3
def method(self):
super().method() # 调用父类的method方法
child = Child()
print(child.value) # 输出1,即来自Parent1的value
print(child.new_value) # 输出3
child.method() # 输出"Parent1's method"
解決策は、複数の継承された親クラスの引数の問題に対しては多種類あるが、実際の状況に応じて適切な方法を選択する必要がある。