如何使用描述符对实例属性做类型检查

分别实现__get__,__set__,__delete__方法,在__set__内使用isinstance函数做类型检查

# 如何使用描述符对实例属性做类型检查,分别实现set,方法,
# 在set内使用isinstance做类型检查
class Attr(object):
    def __init__(self, name, type_):
        self.name = name
        self.type_ = type_

    def __get__(self, instance, cls):
        print('in__get__', instance, cls)
        return instance.__dict__[self.name]

    def __set__(self, instance, value):
        print('in__set__')
        if not isinstance(value, self.type_):
            raise TypeError("expacted is %s" % (self.type_))
        instance.__dict__[self.name] = value

    def __delete__(self, instance):
        print('in__delete__')
        del instance.__dict__[self.name]


class Person(object):
    name = Attr('name', str)
    age = Attr('age', int)
    height = Attr('height', float)


p = Person()
p.name = 'oobj'
p.age = 26

print(p.name)
print(p.age)
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,799评论 1 32
  • 深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先来了解一个概念,RTTI(...
    架构师springboot阅读 5,461评论 0 3
  • 好朋友结婚了,被邀请做姐妹,为她高兴。 结婚前的礼节还蛮多的,而且婚礼的筹备还蛮复杂的,都是为了一生一次的婚礼,今...
    noora_阅读 3,550评论 0 2
  • 感赏自己每天早早起来给儿子准备营养早餐,送儿子上学。 感赏自己不管怎么累都要坚持运动,让自己保持好身材! 感赏自己...
    晓莉_f92b阅读 1,176评论 0 1
  • 单位某驻场服务商的一个驻场人员辞职了,据说薪水提升到9K/月! 不知是该为他高兴,还是难过! 他辞职前,薪水5K/...
    JIUYE001阅读 1,378评论 0 0