instancemethod装饰器在哪里?
|
在我的代码中,我有一个返回类实例的方法,如下所示:
class MyClass:
def fun( self, *args ): # the method
return Props( self, *args )
class Props: # the returned object
def __init__( self, parent, *args ):
self.parent = parent
self.args = args
为了使事情井井有条,我正在考虑将道具放置在MyClass内。然后,我想绕开乐趣,直接将类设为MyClass的实例方法,如下所示:
class MyClass:
@instancemethod # does not exist!
class fun:
def __init__( self, parent, *args ):
self.parent = parent
self.args = args
请注意注释-instancemethod装饰器不存在。
有没有办法做到这一点,即将可调用对象变成实例方法?如果我将@instancemethod更改为@classmethod,则构造工作正常,除非父类当然是类,而不是实例。令我感到惊讶的是,我似乎找不到与之相反的操作。
好奇将其清除!
编辑:
看来我的问题不清楚。我所拥有的是一个有趣的成员函数,它不返回单个值或元组,而是返回一个充满数据的对象。该数据是基于MyClass对象和函数参数的内容生成的。我的初始代码正是我想要的。第二个代码是我希望编写它的方式。
此外,我注意到我正在寻找的装饰器只是以下内容:
def instancemethod( cls ):
def f( *args ):
return cls( *args )
return f
当然,它与我打算绕过的“有趣”方法相同。还要注意的是,琐碎的“ return cls”并不完全相同,即使乍一看也是如此。
使用此装饰器,我的第二个类定义有效并产生了所需的结果,即a.fun()返回基于(可能)基于a中的数据初始化的对象:
a = MyClass()
p = a.fun(1,2,3)
print a # <__main__.MyClass instance at 0xb775b84c>
print p.parent # <__main__.MyClass instance at 0xb775b84c>
print p.args # (1, 2, 3)
如果这里定义的instancemethod不能作为python内置函数使用,这仍然给我一个问题,因为在classmethod和staticmethod旁边似乎没有什么地方。但是,如果没有,我想我可以忍受这种结构。
没有找到相关结果
已邀请:
3 个回复
苦诫
和
方法的类。在您的情况下,您可以将代码从
移到
,将
设置为类的
属性,所有代码都应按需要工作。
邪罗逢确胃
姬第柔炒
您也可以将第一个示例更改为