2012-12-31 3 views
-2

ici est ma classe haha ​​Utiliser `object` pour instancier classe personnalisée

class haha(object): 
    def theprint(self): 
    print "i am here" 

>>> haha().theprint() 
i am here 
>>> haha(object).theprint() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: object.__new__() takes no parameters 

pourquoi haha(object).theprint() obtenir une sortie mal?

+9

Qu'est-ce que vous attendez 'haha (objet)' faire? – BrenBarn

+3

OP confond l'héritage avec l'instanciation – inspectorG4dget

+0

Bien que ce soit une question novice, je pense que l'auteur fait de son mieux pour la poser correctement, et c'est une confusion compréhensible. Pas de motifs pour une downvote, dans mon livre. –

Répondre

0

class haha(object): signifie que haha hérite de object. Hériter de object signifie essentiellement que c'est une classe de nouveau style.

appel haha() crée une nouvelle instance de haha et appelle donc le constructeur qui serait une méthode nommée __init__. Cependant, vous n'en avez pas, donc le constructeur defaul est utilisé qui n'accepte aucun paramètre.

0

Cet exemple d'un léger changement de votre haha peut vous aider à comprendre ce qui se passe. J'ai implémenté __init__ afin que vous puissiez voir quand il est appelé.

>>> class haha(object): 
... def __init__(self, arg=None): 
...  print '__init__ called on a new haha with argument %r' % (arg,) 
... def theprint(self): 
...  print "i am here" 
... 
>>> haha().theprint() 
__init__ called on a new haha with argument None 
i am here 
>>> haha(object).theprint() 
__init__ called on a new haha with argument <type 'object'> 
i am here 

Comme vous pouvez le voir, haha(object) finit par passer object comme paramètre à __init__. Comme vous n'aviez pas implémenté __init__, vous receviez une erreur car la valeur par défaut __init__ n'accepte pas les paramètres. Comme vous pouvez le voir, cela n'a pas beaucoup de sens de le faire.

0

Vous confondez Héritage avec l'initialisation d'une classe lors de l'instanciation.

Dans ce cas, pour votre déclaration de classe, vous devez faire

class haha(object): 
    def theprint(self): 
     print "i am here" 

>>> haha().theprint() 
i am here 

Parce que haha ​​(objet) signifie que haha ​​hérite de l'objet. En python, il n'est pas nécessaire d'écrire ceci car toutes les classes héritent de l'objet par défaut.

Si vous avez une méthode init qui reçoit des paramètres, vous devez passer ces arguments lors de l'instanciation, par exemple

class haha(): 
    def __init__(self, name): 
     self.name=name 
    def theprint(self): 
     print 'hi %s i am here' % self.name 

>>> haha('iferminm').theprint() 
hi iferminm i am here 
Questions connexes