python 學習彙總61:class類-描述符(初級學習- tcy)
阿新 • • 發佈:2018-11-23
描述符 2018/8/9 -------------------------------------------------------------------------- 1.描述符就是一個代表屬性值的物件。 # 描述符只能在類級別上進行例項化。 # 不能通過在__init__()和其他方法中建立描述符物件來為每個例項建立描述符。 class TypedProperty (object): '''定義了一個描述符分配屬性進行型別檢查,如果嘗試刪除屬性,它將引發錯誤''' def __init__( self, name,type, default=None): self.name='_'+name self.type=type self.default=default if default else type() def __get__(self,instance,cls): return getattr (instance, self.name, self. default) def __set__(self,instance, value): if not isinstance (value,self.type): raise TypeError("Must be a%s"% self.type) setattr (instance, self.name, value) def __delete__(self, instance): raise AttributeError ( "Can't delete attribute" ) class Foo (object): name=TypedProperty("name", str) num=TypedProperty ("num", int, 42) f= Foo() a= f.name #隱式呼叫Foo.name.__get__(f,Foo) f.name="Guido" #呼叫Foo.name._ set__(f, "Guido") del f.name #呼叫Foo.name.__delete__(f)