美文网首页
如何使用描述符对实例属性做类型检查

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

作者: udhga | 来源:发表于2019-01-23 00:11 被阅读5次

分别实现__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)

相关文章

  • python(Class6)

    使用描述符对实例属性做类型检查 __get__, __set__, __delete__

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

    分别实现__get__,__set__,__delete__方法,在__set__内使用isinstance函数做...

  • Properties

    属性分为类型属性和实例属性。使用static和class关键字修饰的属性为类型属性,否则为实例属性。其中stati...

  • Swift中实现多态和进行类型转换

    类型 类型检查 使用类型检查操作符(is)来检查一个实例是否属于一个特定的子类。如果实例是该子类类型,类型检查操作...

  • ES8(四) —— Object.getOwnPropertyD

    目录 ES8如何获取Object的描述符设置描述符使用defineProperty()获取单个属性的描述符 —— ...

  • 18、【Swift】类型转换

    使用场景:判断实例的类型转换实例的类型 检查类型: is 转换类型: as 检查是否遵循某个协议 为类型转换定义类...

  • Swift 中实现多态和类型转换

    类型检查 使用类型检查操作符 (is) 来检查一个实例是否属于一个特定的子类。如果实例时该子类类型,类型检查操作符...

  • Python_getter和setter方法

    当给属性赋值的时候,使用实例.属性=属性值的方式显然把属性暴露出来了,并且也无法对属性值进行限制检查,java中提...

  • 创建新的类或实例属性

    问题 你想创建一个新的拥有一些额外功能的实例属性类型,比如类型检查。 解决方案 如果你想创建一个全新的实例属性,可...

  • 第六章枚举和注解

    目录 使用枚举类型替代整型常量 使用实例属性替代序数 使用EnumSet替代位属性 使用EnumMap替代序数索引...

网友评论

      本文标题:如何使用描述符对实例属性做类型检查

      本文链接:https://www.haomeiwen.com/subject/chudjqtx.html