2016-03-19 15 views
-2

tarafından güncellenir Bazı Python pratik yapıyorum. Bir sınıf oluşturdum ve o sınıfın örneklerini oluşturdum.Zaten oluşturulan sınıf örneği setattr() python classmethod

Sınıfın kendisini yeni bir öznitelikle setattr() ile güncelleştiren sınıfa bir classmethod eklediğimde, halihazırda oluşturulan nesneler yeni değeri alır. "Eski" örneklerin, daha önce örneklenmiş olsaydı yeni özniteliği nasıl aldıklarına şaşırdım. aşağıdaki gibi

class Me: 
    x=10 
    def __init__(self,y): 
     self.y=y 
    def mem(self): 
     return self.y 
    def __call__(self): 
     print ("I was Called") 
    @classmethod 
    def addnewprop(cls): 
     newproperty=4 
     setattr(cls,"new",newproperty) 

operasyonlar

olan

beni kodumu göstereyim

... Me.addnewprop() da yukarıdaki nesneler yeni özellik ie almak yapar çağrılması
>>>x=Me(9) 
>>>y=Me(8) 
>>>hasattr(x,"new") 
>>>False 
>>>Me.addnewprop() 
>>>hasattr(x,"new") 
    True 
>>> 

(hasattr (x, "yeni"), gerçek döndürse de, python neden bu şekilde davranıyor? Böcekler mallarını koruyacak ve sadece yenileri yeni mülkiyeti alacaktır. Sizin classmethod

cevap

0

sınıfına Beni bir yöntemdir ve bu nedenle sınıfa ziyade sınıfının bir birey örneği seviyesinde çalışır. Geleneksel olarak, classmethods'a geçirilen parametre, bu gerçeği programcılara hatırlatmak için, kendiliğinden değil, cls'dur. Bu durumda, kendi sınıfınızda kendi, sınıf Me değil, bir örnek, ve değiştirilen öznitelik, sınıfın mevcut tüm örneklerine (ve gelecekte oluşturabileceğiniz) uygulanır.

Değişikliği tek bir örnekte yapmak isterseniz, standart bir yöntem kullanın.

İlgili konular