Python 描述符代码示例

来源:互联网 发布:成都网络公关公司 编辑:程序博客网 时间:2024/06/05 09:16

动态检查格式,可通过描述符的形式实现。

class Typed:    def __init__(self, name, expected_type):        self.name = name        self.expected_type = expected_type    def __get__(self, instance, cls):        if instance is None:            return self        else:            return instance.__dict__[self.name]    def __set__(self, instance, value):        if not isinstance(value, self.expected_type):            raise TypeError('expected ' + str(self.expected_type))        instance.__dict__[self.name] = value    def __delete__(self, instance):        del instance.__dict__[self.name]
def typeassert(**kwargs):    def decorate(cls):        for name, expected_type in kwargs.items():            setattr(cls, name, Typed(name, expected_type))        return cls    return decorate
@typeassert(name=str, shares=int, price=float)class Stock:    def __init__(self, name, shares, price):        self.name = name        self.shares = shares        self.price = price
In [104]: Stock.nameOut[104]: <__main__.Typed at 0xa3df860>In [105]: Stock('test', 1, 2.2).nameOut[105]: 'test'In [106]: Stock('test', 1, 2.2).sharesOut[106]: 1In [107]: Stock('test', 1, 2.2).priceOut[107]: 2.2
原创粉丝点击