【发布时间】:2015-09-11 09:12:32
【问题描述】:
有没有办法强制 Python 中的实例方法在执行之前调用另一个方法?
一个简单的演示示例:
class MyClass(object):
def __init__(self):
pass
def initialize(self):
print "I'm doing some initialization"
def myfunc(self):
print "This is myfunc()!"
我想要一些方法让 myfunc() 在运行之前自动调用 initialize()。如果我这样做:
obj = MyClass()
obj.myfunc()
我希望看到以下输出:
I'm doing some initialization
This is myfunc()!
无需在 myfunc() 中显式调用 initialize()。
原因是如果我有很多“myfunc”实例,比如 myfunc1、myfunc2、myfunc3,都需要调用“initialize”,我宁愿让它们都在同一个地方调用一次初始化,如反对每次手动调用该方法。这是元类可以做到的吗?
【问题讨论】:
-
您要解决什么问题?初始化成本高吗?为什么不在初始化程序
__init__中做呢? -
您对为什么不想在
myfunc()中简单地调用initialize()的解释对我来说毫无意义。 -
我正在侦听消息队列 (Rabbit) 上的事件。不同的事件触发不同的回调,对应于类上的方法。初始化并不昂贵,但每次调用回调时它都需要是唯一的。例如,我有一个唯一的“log_tag”值,对于任何回调调用都必须是唯一的。我可以在 myfuncN() 的每个变体中调用 initialize(),只是看起来不太干。