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)

猜你喜欢

转载自blog.csdn.net/tcy23456/article/details/84262781