2010-01-06 4 views
6

Je veux créer une instance de classe à l'intérieur de lui-même. J'ai essayé de lui de cette façon:Comment créer une instance de classe dans cette méthode de classe?

class matrix: 
    (...) 
    def det(self): 
     (...) 
     m = self(sz-1, sz-1) 
     (...) 
    (...) 

mais je suis erreur:

m = self(sz-1, sz-1) 

AttributeError: matrix instance has no __call__ method

Alors, j'ai essayé de le faire de cette façon:

class matrix: 
    (...) 
    def det(self): 
     (...) 
     m = matrix(sz-1, sz-1) 
     (...) 
    (...) 

et je suis une autre erreur :

m = matrix(sz-1, sz-1) 

NameError: global name 'matrix' is not defined

Bien sûr, la matrice n'est pas globale ss. Je n'ai aucune idée de comment résoudre ce problème.

+3

Le dernier exemple fonctionne pour moi. – Javier

+0

Comme vous l'avez maintenant, 'm' serait une variable locale, pas une variable d'instance, donc elle disparaîtra quand la méthode det() retournera. Cela peut être approprié pour ce que vous faites, mais quand vous dites que vous voulez une "instance de classe en elle-même", il semble que vous voulez que m soit une variable d'instance, auquel cas vous devez vous référer à "self". m " – MatrixFrog

+0

Quelle version de Python utilisez-vous? – MatrixFrog

Répondre

11
m = self.__class__(sz-1, sz-1) 

ou

m = type(self)(sz-1, sz-1) 
+1

Ok, mais le type (self) est la matrice, n'est-ce pas? Alors pourquoi le deuxième exemple de pablo ne fonctionne-t-il pas? Est-ce juste un fait de vie que vous ne pouvez pas faire référence à une classe de l'intérieur de lui-même en Python? – MatrixFrog

+0

Je supprime mon hack d'une réponse en faveur de cette gemme. – manifest

+0

type (self)() ne fonctionne pas pour moi, mais self .__ classe __() fonctionne correctement et c'est tout ce dont j'avais besoin. Merci;) – pablo

Questions connexes