1. 程式人生 > >python 學習彙總61:class類-描述符(初級學習- tcy)

python 學習彙總61:class類-描述符(初級學習- tcy)

描述符  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)