python属性装饰器_Python和set函数中的属性装饰器

您不能直接将属性用作发布代码的修饰器,因为它不是设计用于这种方式的,因此无法正常工作.

如果用作装饰器,则property会将函数转换为getter;如果用作函数,则可以传入getter,setter,deleter和doc.

locals()返回所有本地人,因此您将拥有一个包含fget,fset,fdel,doc,Property和__init__的字典-导致property爆炸,因为它传递了太多参数.

就我个人而言,我喜欢@ x.setter和@ x.deleter样式,因为在类名空间中我不会以不必要的函数名结尾.

如果您必须定期使用2.4,只需自己滚动(或像我一样从2.6中窃取最新版本;):

class property(object):

"2.6 properties for 2.5-"

def __init__(self, fget=None, fset=None, fdel=None, doc=None):

self.fget = fget

self.fset = fset

self.fdel = fdel

self.__doc__ = doc or fget.__doc__

def __call__(self, func):

self.fget = func

if not self.__doc__:

self.__doc__ = fget.__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 setter(self, func):

self.fset = func

return self

def deleter(self, func):

self.fdel = func

return self

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值