2 votes

Dé-emballer ou déshériter un objet

Un bloc de code auquel je n'ai pas accès, renvoie un objet qui est "enveloppé" ou plutôt hérité d'une classe de base, que je veux récupérer. Le wrapper est nuisible, je veux m'en débarrasser. Existe-t-il un moyen de remonter à la classe mère ? De déballer l'objet ? De le déshériter ?

J'ai préparé un exemple simple : Est-il possible de manipuler le u de manière à ce qu'il soit un Person et dire bonjour d'une manière agréable ?

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

    def say_hello(self):
        print("Hi, my name is " + self.name)

class Unfriendly_Person(Person):
    def say_hello(self):
        print("Leave me alone!")

u = Unfriendly_Person("TJ")
u.say_hello()

1voto

Daweo Points 10024

Vous pouvez attribuer à __class__ donc

class Person():
    def __init__(self, name):
        self.name = name
    def say_hello(self):
        print("Hi, my name is " + self.name)

class Unfriendly_Person(Person):
    def say_hello(self):
        print("Leave me alone!")

u = Unfriendly_Person("TJ")
u.__class__ = Person
u.say_hello()

sortie :

Hi, my name is TJ

Mais rappelez-vous que cela va rejeter todo méthodes de Unfriendly_Person même celles qui ne sont pas définies dans Person .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X