gpt4 book ai didi

python - 有没有办法遍历并执行 Python 类中的所有函数?

转载 作者:太空狗 更新时间:2023-10-29 20:35:35 25 4
gpt4 key购买 nike

我有

class Foo():
function bar():
pass

function foobar():
pass

而不是像下面这样一个一个地执行每个函数:

x = Foo()
x.bar()
x.foobar()

是否有一种内置的方法可以按照类中编写的顺序遍历和执行每个函数?

最佳答案

def assignOrder(order):
@decorator
def do_assignment(to_func):
to_func.order = order
return to_func
return do_assignment

class Foo():

@assignOrder(1)
def bar(self):
print "bar"

@assignOrder(2)
def foo(self):
print "foo"

#don't decorate functions you don't want called
def __init__(self):
#don't call this one either!
self.egg = 2

x = Foo()
functions = sorted(
#get a list of fields that have the order set
[
getattr(x, field) for field in dir(x)
if hasattr(getattr(x, field), "order")
],
#sort them by their order
key = (lambda field: field.order)
)
for func in functions:
func()

def bar(self) 上面那行有趣的 @assignOrder(1) 触发了这件事:

Foo.bar = assignOrder(1)(Foo.bar)

assignOrder(1) 返回一个接受另一个函数的函数,对其进行更改(添加字段 order 并将其设置为 1)并返回它。然后在它装饰的函数上调用这个函数(它的 order 字段因此设置);结果替换了原来的函数。

这是一种更漂亮、更易读且更易于维护的表达方式:

  def bar(self):
print "bar"
Foo.bar.order = 1

关于python - 有没有办法遍历并执行 Python 类中的所有函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2597827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com