Cet article est un extrait montrant l'utilisation de l' __bases__
de changement dynamique de la hiérarchie d'héritage de code Python, par l'ajout d'une classe à une des classes existantes collection de classes dont il hérite. Ok, c'est dur à lire, le code est probablement le plus clair:
class Friendly:
def hello(self):
print 'Hello'
class Person: pass
p = Person()
Person.__bases__ = (Friendly,)
p.hello() # prints "Hello"
C'est, Person
n'héritent pas de Friendly
au niveau de la source, mais plutôt cette relation d'héritage est ajouté dynamiquement à l'exécution, par la modification de l' __bases__
attribut de la classe Personne. Toutefois, si vous modifiez Friendly
et Person
à de nouvelles classes de style (par inherting de l'objet), vous obtenez l'erreur suivante:
TypeError: __bases__ assignment: 'Friendly' deallocator differs from 'object'
Un peu de Googling sur ce qui semble indiquer certaines incompatibilités entre un style nouveau et vieux style de classes en ce qui concerne la modification de la hiérarchie d'héritage au moment de l'exécution. Plus précisément: "New-style des objets de la classe ne prennent pas en charge l'affectation de leurs bases attribut"
Ma question, est-il possible de faire de la ci-dessus Amicale/Personne exemple de travail à l'aide de nouvelles classes en Python 2.7+, éventuellement par l'utilisation de l' __mro__
d'attribut?
Avertissement: j'ai pleinement conscience que ce n'est pas le code. J'ai pleinement conscience que la production réelle du code des astuces comme cette tendance à la frontière de illisible, c'est une pure expérience de pensée, et pour funzies d'apprendre quelque chose sur la façon Python traite de questions relatives à l'héritage multiple.