Python,如何从实例方法“自动”调用函数/方法?

时间:2015-06-24 23:34:20

标签: python class metaclass

有没有办法强制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”,我宁愿让它们在同一个地方调用初始化一次,如反对每次手动调用该方法。这是meta类可以做的吗?

3 个答案:

答案 0 :(得分:4)

您可以在Python中使用装饰器。让装饰器在调用之前调用所需的函数。您将能够在所有所需功能中使用装饰器。这是语法糖。

答案 1 :(得分:1)

你可以创建一个包装函数:

<SVG width="100%"></SVG>

答案 2 :(得分:0)

self.initialize()添加到myfunc(),这应该可以满足您的需求。

class MyClass(object):
    def __init__(self):
       pass
    def initialize(self):
       print("I'm doing some initialization")
    def myfunc(self):
       self.initialize()
       print("This is myfunc()!")

尝试:

>>> a = MyClass()
>>> a.myfunc()
I'm doing some initialization
This is myfunc()!

修改 但是,实践是使用DevShark建议的decorators

  

在另一篇文章中讨论过,请参阅Python decorators in classes