python bar函数循环_有没有办法在Python类中循环并执行所有函数?

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值