4 回答
![?](http://img1.sycdn.imooc.com/54584cb50001e5b302200220-100-100.jpg)
TA贡献1851条经验 获得超5个赞
property()
>>> property()<property object at 0x10ff07940>
>>> property().getter<built-in method getter of property object at 0x10ff07998 >>>> property().setter<built-in method setter of property object at 0x10ff07940 >>>> property().deleter<built-in method deleter of property object at 0x10ff07998>
>>> property().getter(None)<property object at 0x10ff079f0>
@decorator
@propertydef foo(self): return self._foo
def foo(self): return self._foo foo = property(foo)
foo
property(foo)
@foo.setter()
property().setter
property
>>> def getter(self): print 'Get!'... >>> def setter(self, value): print 'Set to {!r}!'.format(value)... >>> def deleter(self): print 'Delete!'... >>> prop = property(getter)>>> prop.fget is getterTrue>>> prop.fset is NoneTrue >>> prop.fdel is NoneTrue
.setter()
>>> prop = prop.setter(setter)>>> prop.fget is getterTrue>>> prop.fset is setterTrue>>> prop.fdel is NoneTrue
.deleter()
>>> prop = prop.deleter(deleter)>>> prop.fget is getterTrue>>> prop.fset is setterTrue>>> prop.fdel is deleterTrue
property
.__get__()
, .__set__()
.__delete__()
>>> class Foo(object): pass... >>> prop.__get__(Foo(), Foo)Get!>>> prop.__set__(Foo(), 'bar')Set to 'bar'!>>> prop.__delete__(Foo())Delete!
property()
class Property(object): "Emulate PyProperty_Type() in Objects/descrobject.c" def __init__(self, fget=None, fset=None, fdel=None, doc=None): self.fget = fget self.fset = fset self.fdel = fdel if doc is None and fget is not None: doc = fget.__doc__ self.__doc__ = doc def __get__(self, obj, objtype=None): if obj is None: return self if self.fget is None: raise AttributeError("unreadable attribute") return self.fget(obj) def __set__(self, obj, value): if self.fset is None: raise AttributeError("can't set attribute") self.fset(obj, value) def __delete__(self, obj): if self.fdel is None: raise AttributeError("can't delete attribute") self.fdel(obj) def getter(self, fget): return type(self)(fget, self.fset, self.fdel, self.__doc__) def setter(self, fset): return type(self)(self.fget, fset, self.fdel, self.__doc__) def deleter(self, fdel): return type(self)(self.fget, self.fset, fdel, self.__doc__)
![?](http://img1.sycdn.imooc.com/533e4c5600017c5b02010200-100-100.jpg)
TA贡献1719条经验 获得超6个赞
@property
class Thing: def __init__(self, my_word): self._word = my_word @property def word(self): return self._word>>> print( Thing('ok').word )'ok'
word
class Thing: def __init__(self, my_word): self._word = my_word def word(self): return self._word>>> print( Thing('ok').word() )'ok'
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1789条经验 获得超8个赞
@propertydef x(self): ...
def x(self): ...x = property(x)
而这反过来又是创建 property
只需要一个吸气器。
@x.setterdef x(self, value): ...
x
x.deleter
添加回答
举报