この質問にはすでに答えがあります。
私はPythonクラスを持っているなら:
class BaseClass(object):
#code and the init function of the base class
それから、次のような子クラスを定義します。
class ChildClass(BaseClass):
#here I want to call the init function of the base class
基本クラスのinit関数が、子クラスのinit関数の引数として使用している引数をいくつか取る場合、これらの引数を基本クラスに渡すにはどうすればよいですか。
私が書いたコードは次のとおりです。
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super(ElectricCar, self).__init__(model, color, mpg)
どこが悪いの?
あなたが使用することができますsuper(ChildClass, self).__init__()
class BaseClass(object):
def __init__(self, *args, **kwargs):
pass
class ChildClass(BaseClass):
def __init__(self, *args, **kwargs):
super(ChildClass, self).__init__(*args, **kwargs)
あなたのインデントは正しくありません、これが修正されたコードです:
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super(ElectricCar, self).__init__(model, color, mpg)
car = ElectricCar('battery', 'ford', 'golden', 10)
print car.__dict__
これが出力です。
{'color': 'golden', 'mpg': 10, 'model': 'ford', 'battery_type': 'battery'}
BaseClass
にsuper
、スキップしますBaseClass
そして電話object.__init__
これはほとんど間違いなくあなたが望むものではありません。 - abarnertsuper
(たとえあなたがそれを正しく説明したとしても、あなたがしなかったとしても)特に彼がすでにそれを全く同じように使っているならば、助けにはならない。実際、これは文字ごとに同一です。 - abarnert
Mingyuが指摘したように、フォーマットに問題があります。それ以外は、強くお勧めします派生クラスの名前を使用しない通話中super()
それはあなたのコードを柔軟にしないからです(コードのメンテナンスと継承の問題)。 Python 3では、使用super().__init__
代わりに。これらの変更を組み込んだ後のコードは次のとおりです。
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super().__init__(model, color, mpg)
使用中の問題を指摘してくれたErwin Mayerに感謝します。__class__
super()を使って
あなたはこのようにスーパークラスのコンストラクタを呼ぶことができます
class A(object):
def __init__(self, number):
print "parent", number
class B(A):
def __init__(self):
super(B, self).__init__(5)
b = B()
注意:
これは、親クラスが継承した場合にのみ機能します。object
Python 3を使用している場合は、引数を指定せずに単にsuper()を呼び出すことをお勧めします。
class Car(object):
condition = "new"
def __init__(self, model, color, mpg):
self.model = model
self.color = color
self.mpg = mpg
class ElectricCar(Car):
def __init__(self, battery_type, model, color, mpg):
self.battery_type=battery_type
super().__init__(model, color, mpg)
car = ElectricCar('battery', 'ford', 'golden', 10)
print car.__dict__
スーパーで電話しないでくださいクラスそれは無限の再帰例外を引き起こすかもしれないのでこの答え。