2010-01-06 4 views
6

Я хочу создать экземпляр класса внутри себя. Я пытался ему таким образом:Как создать экземпляр класса внутри этого метода класса?

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

, но я получил сообщение об ошибке:

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

AttributeError: matrix instance has no __call__ method

Итак, я попытался сделать это таким образом:

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

и я получил другую ошибку :

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

NameError: global name 'matrix' is not defined

Конечно, матрица не является глобальной cla песчаники Я не знаю, как решить эту проблему.

+3

Последний пример работает для меня. – Javier

+0

Поскольку у вас есть это прямо сейчас, «m» будет локальной переменной, а не переменной экземпляра, поэтому она исчезнет, ​​когда метод det() вернется. Это может быть уместно для того, что вы делаете, но когда вы говорите, что хотите «экземпляр класса внутри себя», это звучит так, как будто вы хотите, чтобы m была переменной экземпляра, и в этом случае вам нужно ссылаться на нее как на «я». m " – MatrixFrog

+0

Какую версию Python вы используете? – MatrixFrog

ответ

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

или

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

Хорошо, но тип (сам) - это матрица, не так ли? Так почему же второй пример pablo не работает? Это просто факт жизни, который вы не можете отнести к классу изнутри в Python? – MatrixFrog

+0

Я удаляю свой взлом ответа в пользу этого драгоценного камня. – manifest

+0

type (self)() не работает для меня, но сам .__ класс __() работает правильно, и это все, что мне нужно. Спасибо;) – pablo

Смежные вопросы