Disons que j'ai configuré les classes suivantes:
class Foo:
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar:
def __init__(self, frob, frizzle):
self.frobnicate = frob
self.frotz = 34
self.frazzle = frizzle
Comment puis-je (si je peux) utiliser super () dans ce contexte pour éliminer le code en double?
Dans Python> = 3.0, comme ceci:
class Foo():
def __init__(self, frob, frotz)
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle)
super().__init__(frob, 34)
self.frazzle = frizzle
En savoir plus ici: http://docs.python.org/3.1/library/functions.html#super
EDIT: Comme dit dans une autre réponse, parfois simplement utiliser Foo.__init__(self, frob, 34)
peut être la meilleure solution. (Par exemple, lorsque vous travaillez avec certaines formes d'héritage multiple.)
En supposant que vous vouliez que la classe Bar définisse la valeur 34 dans son constructeur, cela fonctionnerait:
class Foo(object):
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle):
super(Bar, self).__init__(frob, frizzle)
self.frotz = 34
self.frazzle = frizzle
bar = Bar(1,2)
print "frobnicate:", bar.frobnicate
print "frotz:", bar.frotz
print "frazzle:", bar.frazzle
Cependant, super
introduit ses propres complications. Voir par exemple super considéré comme nocif . Par souci d'exhaustivité, voici la version équivalente sans super
.
class Foo(object):
def __init__(self, frob, frotz):
self.frobnicate = frob
self.frotz = frotz
class Bar(Foo):
def __init__(self, frob, frizzle):
Foo.__init__(self, frob, frizzle)
self.frotz = 34
self.frazzle = frizzle
bar = Bar(1,2)
print "frobnicate:", bar.frobnicate
print "frotz:", bar.frotz
print "frazzle:", bar.frazzle