- class Descriptor:
- 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:
- name = Descriptor("name", str)
- num = Descriptor("num", int, 42)
- f = Foo()
- a = f.name
- f.name = "Guido"
- del f.name # Raise AttributeError
- //该片段来自于http://www.codesnippet.cn/detail/290820135461.html
来源: http://www.codesnippet.cn/detail/290820135461.html