2010-01-06 16 views
6

İçinde sınıf örneği oluşturmak istiyorum. Bu arada kendisine çalıştı:Bu sınıf yönteminde sınıf örneği nasıl oluşturulur?

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

ama hata var: Yani

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

AttributeError: matrix instance has no __call__ method

, bu arada bunu yapmaya çalıştık:

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

ve ben başka hata var :

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

NameError: global name 'matrix' is not defined

Tabi ki matris global değil ss. Bu sorunu nasıl çözeceğimi bilmiyorum.

+3

son örneği benim için çalışıyor. – Javier

+0

Şu anda sahip olduğunuz gibi, 'm' bir örnek değişkeni değil, yerel bir değişken olabilir, bu nedenle det() yöntemi döndüğünde kaybolacaktır. Bu, yaptığınız şey için uygun olabilir, ancak "kendi içinde bir sınıf örneği" istediğini söylediğinizde, bir örnek değişkeni olmak isteyebileceğinizi düşündüğünüzde, bu durumda "kendiniz" olarak adlandırmanız gerekir. m " – MatrixFrog

+0

Hangi sürüm Python kullanıyorsunuz? – MatrixFrog

cevap

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

veya

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

Tamam, ama (kendiliğinden) matris yazın, değil mi? Öyleyse pablo'nun ikinci örneği neden çalışmıyor? Python'da kendi içinden bir sınıfa başvuramayacağınız bir hayat gerçeğidir? – MatrixFrog

+0

Bu mücevherin lehine bir cevabın kesilmesini siliyorum. – manifest

+0

type (self)() benim için çalışmıyor, ancak self .__ class __() düzgün çalışıyor ve ihtiyacım olan her şey var. Teşekkürler;) – pablo

İlgili konular