【发布时间】:2012-03-15 16:03:25
【问题描述】:
我会动态地将方法添加到class...函数名也将动态传递。
我该怎么办?我是这样尝试的
def decor(*var):
def onDecorator(aClass):
class onInstance:
def __init__(self,*args,**kargs):
setter=var
aClass.setter = self.flam
self.wrapped = aClass(*args,**kargs)
def __getattr__(self,attr):
return getattr(self.wrapped,attr)
def __setattr__(self,attr,value):
if attr == 'wrapped':
self.__dict__[attr]=value
else:
setattr(self.wrapped,attr,value)
def flam(self,*args):
self.__setattr__('dimension',len(args[0]))
return onInstance
return onDecorator
但如果我这样做:
print(aClass.__dict__)
我有
'setter': <bound method onInstance.flam of <__main__.onInstance object at 0x522270>>
而不是var:.....
我有这门课:
class D:
def __init__(self, data):
self.data = data
self.dimension = len(self.data)
我会打电话给:
D.name()
已经回复self.dimension,但我不知道提前name
【问题讨论】:
-
显示您希望用于将方法附加到类的代码示例。我不知道您如何拥有要附加的方法,但没有任何名称。我也不知道如果该类最初不是使用该方法设计的,那么您希望该方法如何有意义地附加到该类。
-
多年后,但展示了一个很好且简单的解决方案:medium.com/@mgarod/…