我有一些代码,允许您定义christmas
上发生的事情,而不知道底层实现或如何调用方法,例如
# main.py
import lib.person
person = lib.person.Person()
@person.onchristmas()
def christmas():
print "It's Christmas"
类的实现如下所示:
# lib.person.py
class Person():
def onchristmas(self):
def decorator(f):
self.christmas_handler = f
return f
return decorator
def is_christmas(self):
# called from somewhere else:
self.christmas_handler()
问题是我不能在不构造person的情况下导入main.py
。同样,我不能将构造函数移动为:
person = None
def init():
person = lib.person.Person()
return person
因为那样的话,这个人就不是典型的装饰工人了。正确的方法是什么
christmas
操作,而无需编辑lib.person.py
init()
显式构造person,而不是在导入时进行。你知道吗编辑评论中的更多详细信息:
事实上,有许多不同的事情可以发生,不仅仅是圣诞节,而且每个动作不只是一个处理程序,可能有一个数字,所有的处理程序都必须执行:
所以:
def onchristmas(self):
def decorator(f):
self.christmas_handler.append(f)
return f
return decorator
def is_christmas(self):
# called from somewhere else:
for h in self.christmas_handler:
h()
用法:我希望其他人能够指定一个或多个操作的行为,而不必知道如何/何时调用它们,理想情况下,可以进一步取消注册处理程序。你知道吗
我还应该提到的是,只有Person的实例才会出现,不过我对Python中的静态方法和单例不太熟悉。谢谢你的帮助!你知道吗
问题是你的装饰者和你的州的混合。为什么不把decorator从类中分离出来,允许用户提供自己的函数呢。这样,装饰程序所依赖的唯一状态就是提供给它的状态。类似的东西:
相关问题 更多 >
编程相关推荐