2010-06-22 7 views
1

J'ai la classe A qui est supposé hériter de la classe B dont le nom n'est pas encore connu au moment de l'écriture A. Est-il possible de déclarer A ne héritant de rien et d'ajouter B comme classe de base pendant l'instanciation de A? Exemple:Définir dynamiquement l'héritage en Python

fichier Première

class B: 
    def __init__(self): 
    self.__name = "Class B" 

    def name(self): 
    return self.__name 

fichier Deuxième

class A: 
    def __init__(self): 
    self.__name = "Class A" 

# At some point here, the appropriate module name and location is discovered 
import sys 
sys.path.append(CustomModulePath) 
B = __import__(CustomModuleName) 

magic(A, B) # TODO What should magic() do? 

a = A() 
print a.name() # This will now print "Class A", since name() is defined in B. 
+2

Pouvez-vous expliquer pourquoi vous avez besoin de faire cela? – danben

+0

Dans cette application, j'ai besoin de manipuler les classes basées sur les métadonnées spécifiques à l'application, pas par des noms de classes ordinaires. – dpq

Répondre

2

Oui, vous pouvez accomplir cela avec métaclasses. Ce n'est pas le sujet le plus facile à aborder, mais ça va faire l'affaire. Il y a une question Stack Overflow à leur sujet qui semble avoir de bonnes informations et j'ai aussi trouvé un IBM article qui pourrait aussi aider. Quelque part dans la documentation officielle de Python, il y a une section à leur sujet mais je ne me souviens pas exactement d'où je viens.

+0

la question SO a particulièrement un exemple sur la façon de jouer avec l'héritage, alors regardez-y bien sûr – Claudiu

+0

On dirait que les métaclasses sont exactement ce dont j'avais besoin, merci beaucoup! – dpq

Questions connexes