【发布时间】:2017-10-28 11:03:41
【问题描述】:
我有一个班级叫A:
>>> class A:
def __init__(self):
self.register = {}
>>>
A 类将被B 类子分类。但是,B 类包含需要在A 类的字典实例中注册为name: function 对的方法。这样A 的类就可以使用这些方法来工作了。
这是我的意思的一个例子:
>>> class B(A):
def foo(self):
pass
def bar(self):
pass
>>> b = B()
>>> b.register # foo and bar were registered
{'key': <foo function>, 'key2': <bar function>}
>>>
有没有一种惯用的方法来解决这个问题?或者这样的事情是不可能的,最好改变我的代码结构。
注意这不是Auto-register class methods using decorator 的重复,因为我的寄存器不是全局的,它是一个类的实例变量。这意味着使用所选答案中所示的元类将不起作用。
【问题讨论】:
-
你能在底部添加一个 TL;DR 吗?
-
这是干什么用的;你想用它实现什么样的行为?您不能在类定义时访问实例属性; 没有没有实例。
-
@jonrsharpe 我猜你是对的。我试图实现一个基于正则表达式的词法分析器。我试图允许用户使用装饰器将某个正则表达式模式映射到一个函数。这样,只要匹配了特定的正则表达式,就会调用该函数。我认为使用装饰器会是一种简洁的方法。
-
你的 TL;DR 只是标题,而 still 实际上并没有提及 你想要做什么...这个当前是 XY 问题。
-
@jonrsharpe 我很抱歉,但我不确定如何简洁地描述我的问题。但是,你的权利。回顾我的代码后,我发现这有点像 XY 问题。我将编辑我的问题以澄清。
标签: python dictionary python-3.5 python-decorators