web-dev-qa-db-fra.com

Comment étendre Python init de classe

J'ai créé une classe de base:

class Thing():
    def __init__(self, name):
        self.name = name

Je veux étendre la classe et l'ajouter à la méthode init pour que SubThing ait à la fois une propriété name et une propriété time. Comment fait-on ça?

class SubThing(Thing):
    # something here to extend the init and add a "time" property

    def __repr__(self):
        return '<%s %s>' % (self.name, self.time)

Toute aide serait géniale.

29
MFB

Vous pouvez simplement définir __init__ Dans la sous-classe et appeler super pour appeler correctement les méthodes __init__ Des parents:

class SubThing(Thing):
    def __init__(self, *args, **kwargs):
        super(SubThing, self).__init__(*args, **kwargs)
        self.time = datetime.now()

Assurez-vous d'avoir votre sous-classe de classe de base à partir de object, car super ne fonctionnera pas avec les classes à l'ancienne:

class Thing(object):
    ...
38
Jesse

Vous devriez écrire un autre __init__ méthode dans SubThing, puis appelez le constructeur de la superclasse pour initialiser ses champs.

Ce Q&R devrait vous fournir quelques exemples supplémentaires.

1
mariosangiorgio