属性getter有多个参数?

似乎Getter的定义是仅通过"自我"的方式:
班级资金(dict):
def __init __(自我):
self.fundict = dict()
def fget(自我,娱乐):
返回资金[fun.func_name]
def fset(self,newfun):
self.fundict [newfun.func_name] = newfun
newfun =属性(fget,fset)
Trackback(最近的最新电话):
文件" ",第1行,
A.Newfun('f1')
TypeError:fget()精确地进行了2个参数(1个给定)
是否可以将多个参数传递给FGET函数?
我知道:我可以定义具有属性名称的函数(在
例如),并用更多参数调用.但是那时我没有得到
一般而言,二传手和财产的好处!

# 回答1


在17 Juil,16:57,Mk 从此处的dict继承有什么用???
属性的错误签名.
请注意,当您的(不正确)GETTER时,您正在传递字符串
期望功能对象.
是:直接称呼它! - )
或记住那句老话:
"""
任何软件问题都可以通过添加另一层
间接.当然,除了间接太多的问题外.
"""
AT&T实验室的Steve Bellovin
应用于您的问题,这意味着要使您的Getter返回
关闭将获取功能或功能名称并返回的结果
查找,即:
def fget(self):
返回lambda funcname:self.fundict [funcname]
但是无论如何:这仍然是任意的典型情况
过度复杂.一个普通的命令就足够了.或者,给定
上下文(如在此处的较早文章中所暴露的),我建议一些东西
喜欢:
class callbacksregister(对象):
def __init __(self,** kw):
self._store = dict(** kw)
def寄存器(self,func,name = none):
如果名称无:
名称= func .__名称__
self._store(name)= func
返回功能
def get(self,name,default = none):
返回self._store.get(名称,默认值)
def __getAttr __(self,name):
尝试:
返回self._store [名称]
除了KeyError:
rish attributeError('%s对象没有属性'%s'"%
(自我,名字)
callbacks = callbacksregister()
@callbacks.register
def F1(arg):
打印" F1",arg
callbacks.f1(" yadda")
callbacks.get('f1')('yadda')
计算属性的好处(属性类仅为一个
可能的实现)是解除接口(看起来像个
实现的普通属性)(实际上是计算得出的).和
从这种脱钩中受益是您不必写getters/
播放器直到您真的需要它们为止,因为您可以转动一个平原
将属性归因于计算的,而无需打破接口.
我看不到您从上面的财产中获得什么"好处"
摘要.

标签: python

添加新评论