J'ai essayé d'hériter avec Python et init avec super, mais TypeError: must be type, not classobj Des souvenirs quand c'était difficile à dire
Tout d'abord, la version Python
shell
$ python -V
Python 2.7.10
J'essayais de créer une autre classe en héritant de la classe suivante. Classe d'héritage
hogehoge.py
class Client():
def __init__(self, url, **kwargs):
Classe d'héritage
manager.py
import hogehoge
class Manager(hogehoge.Client):
def __init__(self, url, *kwargs):
super(Manager,self).__init__(url, *kwargs)
Essayez d'utiliser
shell
$ python
>>> import manager
>>> cl = manager.Manager("https://example.jp")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "manager.py", line 10, in __init__
super(Manager,self).__init__(url, *kwargs)
TypeError: must be type, not classobj
Je n'ai pas compris même si je cherchais sur Google.
Le débordement de pile auquel je suis finalement arrivé est le suivant.
python - super() raises "TypeError: must be type, not classobj" for new-style class - Stack Overflow http://stackoverflow.com/questions/9698614/super-raises-typeerror-must-be-type-not-classobj-for-new-style-class
?? ?? Y a-t-il des objets nouveaux et anciens? ?? Voir ci-dessous pour la relation entre les types et les classes Python
Relation entre types et classes python - Paisonnikki http://pydiary.bitbucket.org/blog/html/2013/10/12/type.html
Il existe deux types de classes dans Python ~~ objets ~~.
L'instance créée par hogehoge.py ci-dessus est un ancien classobj et non un type, donc elle ne peut pas être super. Cela semble être une erreur.
La solution est ci-dessous. ~~ Lire la classe parent en tant qu'objet dans la classe héritée ~~ Héritage multiple du client et de l'objet Merci @shiracamus.
manager.py
import hogehoge
class Manager(hogehoge.Client, object):
def __init__(self, url, *kwargs):
super(Manager,self).__init__(url, *kwargs)
Je suis nouveau dans Python, veuillez donc signaler toute erreur.
Recommended Posts