我需要将类方法存储到列表中并通过循环执行它们。我定义了一个装饰器并使用它将类方法追加到列表中。该类在单独的模块中定义,并在主循环中通过列表并调用存储在该列表中的类方法。当我运行主,我得到了错误:如何执行存储在列表对象中的装饰类方法?
类型错误:example_01()失踪1个人需要的位置参数:“自我”
我有点知道我需要创建Bar类的实例来执行它的方法,但这会阻止我使用列表。什么是使用这种构造的正确方法? 请帮助...
我使用python 3.4
感谢
mybar.py
========
examples = list()
def example(fn):
try: name = 'Example %d' % int(fn.__name__[7:])
except: name = fn.__name__
def wrapped():
print('Running: %s\n' % name)
fn()
print('\n')
examples.append(wrapped)
return wrapped
class Bar:
def __init__(self):
self.message = "I'm %s" % (__name__)
@example
def example_01(self):
print(self.message)
print("Executing example_01")
@example
def example_02(selfs):
print(self.message)
print("Executing example_02")
main.py
=======
from bar import mybar
def main():
for example in mybar.examples:
example()
if __name__ == "__main__":
main()
我修改代码以使用@classmethod装饰为每个类的方法和它的作品,但我不理解为什么。我不必显式调用带有Bar的example()。也没有提供类对象的类函数的参数像def python doc中记录的def example_01(cls)。可能有人请解释
mybar.py
=======
class Bar:
data = 25
def __init__(self):
self.message = "I'm %s" % (__name__)
Bar.data = 30
@classmethod
@example
def example_01():
print("Executing example_01")
print("Data: ", Bar.data)
@classmethod
@example
def example_02():
print("Executing example_02")
print("Data: ", Bar.data)
输出:
Running: example_01
Executing example_01
Data: 25
Running: example_02
Executing example_02
Data: 25