我有一个基本类Framework
,有3个用户可以设置的方法:initialize
,handle_event
和{
这些方法由run
方法执行:
class Framework(object):
def initialize(self):
pass
def handle_event(self, event):
pass
def finalize(self):
pass
def run(self):
self.initialize()
for event in range(10):
self.handle_event(event)
self.finalize()
{{cd6>这样{cd6>就可以创建 这些修饰符决定了用户可以添加到类中的可选方法的执行顺序。我认为默认情况下, 老实说,我不知道如何着手解决这个问题。任何能把我推向正确方向的帮助都是非常欢迎的!非常感谢。在initialize
,handle_event
和{precedence=0
。然后,用户可以添加任何具有正确装饰器的方法,他将知道这些方法在模拟运行中何时执行。在
如果您使用的是python3.6,那么这种情况可以利用新的
__init_subclass__
方法。当子类被创建时,它被子类调用。在如果没有Python3.6,您必须使用元类。在
decorator本身可以用所需的数据标记每个方法。在
如果您有一个复杂的类层次结构,应该正确地继承操作方法,那么在将其作为类属性应用之前,您必须将
handlers
字典中的列表与超类中的列表合并(将超类作为cls.__mro__[1]
)应用。在另外,如果使用的是Python<;3.6,则需要将
__init_subclass__
上的逻辑移到元类中。只需将代码放在元类的__init__
方法上(并适当地调整传入参数和超级调用),它的工作原理应该是一样的。在我的想法是使用基于类的decorator,它很简单,并且提供中间上下文以便在修饰函数之间共享。所以decorator应该是这样的(我使用的是python3.5):
在装饰时,首先执行init,并存储优先值以备将来使用。其次,执行调用,只将目标函数附加到方法字典中(请注意,调用方法结构可以定制为允许调用具有相同优先级的多个方法)。在
另一方面,目标类和方法应该是这样的
^{pr2}$这确保了,如果调用以下方法之一,它将以给定的顺序调用所有修饰的方法。在
希望有帮助,如果你对其他东西感兴趣,请在下面评论我。在
相关问题 更多 >
编程相关推荐