我有一个类,我想在类内的列表中的所有方法,即使我有两个同名的方法,我希望它工作,我的问题是我不能访问该类以将方法放在那里。 可以说我有装饰用装饰器保存所有的类方法
def dec(func):
class = ????
class.methods.append(func)
return func
和我有类
class A(object):
methods = []
@dec
def a(self):
print 2
@dec
def a(self):
print 3
我希望能够做
A.methods[0](A())
A.methods[1](A())
(A() becuase those methods need self)
或类似的东西
我已经阅读了很多像这样的问题,看起来像我想要的是不可能的,因为当装饰器被调用时,A不存在,但是可能有一种方法可以访问它的变量,因为装饰器在其中运行?
但你*不能*有两种方法具有相同的名称。 –
这个怎么样? https://ideone.com/FIa3C6 – falsetru
@DanielRoseman:但你*可以*将它们添加到同一个列表中,因为它们按顺序执行。这个类只会接收最后一个,因为它确实替换了类的主体名称空间中的第一个,但这并不意味着装饰器将不会被执行,并且在替换之前您将拥有对第一个函数对象的引用第二。 –