aşağıdaki python kodu geçerli midir?Bir python sınıfı, sınıfının yeni bir örneğini döndürür mü?
class Test:
def __init__(self):
self.number = 5
def returnTest(self):
return Test()
aşağıdaki python kodu geçerli midir?Bir python sınıfı, sınıfının yeni bir örneğini döndürür mü?
class Test:
def __init__(self):
self.number = 5
def returnTest(self):
return Test()
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.
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.
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.
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>
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
Bu harika bir düşünce. Sonuçları bir listeye saklamak farklı nesneler oluşturmaya devam ediyor. –
+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