C'était un souvenir douloureux quand on m'a dit TypeError: doit être de type, pas de classe obj en essayant d'hériter avec Python

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 ~~.

  1. classobj
  2. type

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

C'était un souvenir douloureux quand on m'a dit TypeError: doit être de type, pas de classe obj en essayant d'hériter avec Python
J'obtiens un UnicodeDecodeError en essayant de me connecter à oracle avec python sqlalchemy
Quand j'ai essayé de créer un environnement virtuel avec Python, cela n'a pas fonctionné
Une note à laquelle j'étais accro lors de l'exécution de Python avec Visual Studio Code
Une histoire à laquelle j'étais accro après la communication SFTP avec python
[python] Remarques lors de la tentative d'utilisation de numpy avec Cython
Un mémorandum lors de l'acquisition automatique avec du sélénium
Une note à laquelle j'étais accro lors de la création d'une table avec SQL Alchemy
[Python] Hériter d'une classe avec des variables de classe
[Python] Quand j'ai essayé de créer un outil de décompression avec un fichier zip que je connaissais juste, j'étais accro à sys.exit ()
Lorsque j'ai essayé d'exécuter Python, j'ai été ignoré dans le Microsoft Store
Une histoire à laquelle j'étais accro à essayer d'obtenir une URL de vidéo avec tweepy
Utilisez Python de Java avec Jython. J'étais aussi accro.
[Python] Il était très pratique d'utiliser la classe Python pour le programme ROS.
J'étais accro à essayer Cython avec PyCharm, alors prenez note
Dans IPython, quand j'ai essayé de voir la valeur, c'était un générateur, donc je l'ai inventé quand j'étais frustré.
[Python] Comment gérer l'erreur d'instance is "is instance () arg 2 doit être un type ou un tuple de types"
Quand j'ai fait un treemap (graphique de zone) avec python, c'était subtil, donc quand j'ai utilisé fleurir, c'était plutôt bien.
Quand j'ai essayé de créer un VPC avec AWS CDK mais que je n'ai pas pu le faire
Que faire si «TypeError: must be string, not int…» apparaît lors de l'utilisation de strptime
Trois choses auxquelles j'étais accro lors de l'utilisation de Python et MySQL avec Docker
J'ai pu me moquer d'AWS-Batch avec python, moto, donc je vais le laisser
Migration Python 3> TypeError: doit être un nombre réel, pas le support de la carte> changer map () en liste (map ())
J'ai essayé de créer un projet en utilisant Python sur Docker avec PyCharm, mais cela a fonctionné avec Docker Compose
Je veux écrire dans un fichier avec Python
J'ai essayé de générer automatiquement la chaîne de caractères à entrer dans M. Adjustment avec Python
[Introduction au trading système] J'ai dessiné un oscillateur stochastique avec python et joué avec ♬
Ce que j'ai fait quand j'étais en colère de le mettre avec l'option enable-shared
Une note de malentendu lors de la tentative de chargement de l'intégralité du module self-made avec Python3
Un débutant a essayé de colorier un dessin au trait avec un chainer. J'ai pu le faire.
Que faire lorsque "Erreur de type: doit être _socket.socket, pas socket" apparaît dans GAE
[Go language] Soyez prudent lors de la création d'un serveur avec mux + cors + alice. Surtout à propos de ce à quoi j'étais accro autour de CORS.
Lors de l'écriture dans un fichier csv avec python, une histoire que j'ai fait une légère erreur et n'a pas respecté la date de livraison
J'ai écrit une classe qui facilite l'écriture en spécifiant les paroles de la partie lors de l'utilisation de Mecab avec python
J'étais accro au grattage avec Selenium (+ Python) en 2020
Je veux hériter de l'arrière avec la classe de données python
Je veux travailler avec un robot en python.
Python: peut être répété en lambda
Ce à quoi j'étais accro lors de l'utilisation de Python tornado
Je veux faire fonctionner un ordinateur quantique avec Python
Quand j'ai essayé d'installer PIL et matplotlib dans un environnement virtualenv, j'en étais accro.
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
J'ai été surpris de recevoir une belle critique lorsque j'ai écrit Python à CheckIO et son explication
Ce à quoi j'étais accro en traitant d'énormes fichiers dans un environnement Linux 32 bits
Depuis qu'il y avait Doppelgenger, j'ai essayé de le distinguer avec l'intelligence artificielle (rires) (Partie 2)
J'ai créé un serveur avec socket Python et ssl et j'ai essayé d'y accéder depuis le navigateur
[Note] Une histoire sur la tentative de remplacer une méthode de classe avec deux barres inférieures dans la série Python 3.
J'ai essayé de créer un générateur qui génère une classe conteneur C # à partir de CSV avec Python
Depuis qu'il y avait Doppelgenger, j'ai essayé de le distinguer avec l'intelligence artificielle (rires) (Partie 1)
Je souhaite générer une sortie lors de la conversion de la valeur du type (par exemple, datetime) qui n'est pas pris en charge lors de la sortie de json avec python