2010-01-06 111 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 SS。我不知道如何解決這個問題。

+3

最後一個例子對我的作品。 – Javier 2010-01-06 18:45:35

+0

就像你現在一樣,'m'將是一個局部變量,而不是一個實例變量,所以當det()方法返回時它將消失。這可能適合你正在做的事情,但是當你說你想要一個「類內部實例」時,聽起來你可能希望m是一個實例變量,在這種情況下,你需要將它稱爲「self」。 m「 – MatrixFrog 2010-01-06 18:46:26

+0

你使用的是什麼版本的Python? – MatrixFrog 2010-01-06 18:46:58

回答

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

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

好的,但類型(自我)是矩陣,不是嗎?那麼爲什麼巴勃羅的第二個例子不工作?在Python中,你不能從內部引用一個類是否只是生活的一個事實? – MatrixFrog 2010-01-06 18:53:29

+0

我正在刪除我的攻擊贊成這個寶石的黑客攻擊。 – manifest 2010-01-06 19:20:35

+0

type(self)()對我不起作用,但self .__ class __()正常工作,這是我需要的一切。謝謝;) – pablo 2010-01-09 15:47:33

相關問題