2016-02-08 19 views
7

gerektirir Bir önceki durumda olduğu gibi self.ff[0] == self.f değil self.ff == self.f?Yöntem Bu kod çalışır anlamak isteyen açık `self` argüman

+0

Emin değilim, ancak yöntemler sınıfın üyesi olan işlevlerdir. İkinci örneğinizde, ff bir işlevdir, bir işlev değildir ve ff [0] MyClass öğesinin bir üyesi değildir. Bu sadece bir fonksiyon. –

+0

neden ff [0] 'sınıfının bir üyesi değil? –

+0

Bu daha iyi bir başlık mı? Bu ilginç bir soru, bunun için teşekkürler! –

cevap

3

Sınıfınızın üyesini yazdırırken farkı görebilirsiniz. İlk Örneğin

Eğer fonksiyon (me) bağlı yönteme sarılır olduğunu göreceksiniz ki sizin için self parametreyi işler:

>>> MyClass.ff 
<unbound method MyClass.f> 
>>> MyClass().ff 
<bound method MyClass.f of <__main__.MyClass object at 0x7f53>> 

ikinci örnekteki işlevi olarak kullanılır iken normal işlevi:

>>> MyClass.ff[0] 
<function f at 0x7f54> 
>>> MyClass().ff[0] 
<function f at 0x7f54> 
+0

soruyu değiştirelim: neden ikinci durumda 'MyClass.ff [0]! = MyClass.f' –

+0

@RuggeroTurra aynı nedenden dolayı. 'MyClass.ff [0]' 'MyClass.f' işlevi bu işlevi sarmayan bir ilişkisiz yöntemdir. – tynn

İlgili konular