2013-09-26 64 views
1

我有這樣描述:的Python - 添加屬性描述

# Generic descriptor 
class Attribute(object): 
    def __init__(self, value): 
     self.value = value 
    def __get__(self, instance, value): 
     return self.value 
    def __set__(self, instance, value): 
     self.value = value 

我想補充的屬性「修改」檢查描述符的情況下被修改。 ES。

# Generic descriptor 
class Attribute(object): 
    def __init__(self, value): 
     self.value = value 
     self.modified = False 
    def __get__(self, instance, value): 
     return self.value 
    def __set__(self, instance, value): 
     self.value = value 
     self.modified = True 

我該怎麼做?

回答

2

注意,在你的__get____set__方法,你居然要訪問instance,不selfself是實際Attribute對象)。

這裏是做這件事的一種方法:

class Attribute(object): 
    def __init__(self, attr): 
     self.attr = attr 
    def __get__(self, instance, owner): 
     return getattr(instance, self.attr) 
    def __set__(self, instance, value): 
     setattr(instance, self.attr, value) 
     instance.modified = True 

class A(object): 
    def __init__(self): 
     self._f = 0 
     self.modified = False 
    f = Attribute('_f') 

a = A() 
a.f 
=> 0 
a.modified 
=> False 
a.f = 33 
a.modified 
=> True 

當然,這個片段可以在許多方面,這取決於你想要達到的目的來改善。