2012-05-30 14 views

cevap

17

Evet geçerlidir. Sınıf, bir nesne oluşturduğunuz ve returnTest yöntemini çağırdığınız süreye göre tanımlanır.

In [2]: x = Test() 

In [3]: y = x.returnTest() 

In [4]: y 
Out[4]: <__main__.Test instance at 0x1e36ef0> 

In [5]: 

Ancak, yöntem, bir fabrika gibi davranan durumlarda, classmethod yönetmeni kullanarak düşünebilirsiniz. Miras ve diğer sıkıntılar yolunda geldiğinde, bu yardımcı olabilir.

1

Evet, geçerli bu. returnTest çağrılıncaya kadar çalıştırılmayacaktır. Yeni oluşturulmuş nesnede yöntem çağrılmadığı için sonsuz bir döngü oluşturmaz.

0

Evet. Geçerli bir python kodu. Birçok programlama dili tanımlanmış bir sınıf örneğini döndürmeye izin verir. tekil desenine düşünün.

0

Evet, çalışır ancak returnTest() her zaman Testi aynı örneği olduğu görülüyor.

class Test: 
    def __init__(self): 
    self.number = 5 

    def returnTest(self): 
    return Test() 


t = Test() 
print t 
print t.returnTest() 
print t.returnTest() 


$ python te.py 
<__main__.Test instance at 0xb72bd28c> 
<__main__.Test instance at 0xb72bd40c> 
<__main__.Test instance at 0xb72bd40c> 

Bu, Python 2.7 ve 3.2 için geçerlidir. @classmethod bir fark yaratmadı. İlginçtir ki, PYPY farklı bir örneğe her zaman döndürür:

$ pypy te.py 
<__main__.Test instance at 0xb6dcc1dc> 
<__main__.Test instance at 0xb6dcc1f0> 
<__main__.Test instance at 0xb6dcc204> 
+10

Bunu yapmazsanız, çöp toplandı ve o olabilir aynı örneği sizin gibi görünüyor olabilir çünkü t.returnTest() sonucunu depolamak deneyin geri döndü ama sadece aynı adres, geri dönüştürülmüş. – kasyc

+2

Bu harika bir düşünce. Sonuçları bir listeye saklamak farklı nesneler oluşturmaya devam ediyor. –

+1

+1'den kasyc'ye. Windows üzerinde Python 2.7.1 kullanıyorum. Referansı saklamaksızın, kasyc tarafından bahsedilen çöp toplanan alanın yeniden kullanımını/geri dönüşümünü de gözlemleyebilirim. – pepr

İlgili konular