对于我的特定用例,我想在不评估方法的情况下分配method2,然后要调用method1,如下所示。
class A():
def method1(self):
print("HELLO")
return self
def method2(self,arg1):
print("HELLO"+arg1)
return self
a=A()
m2=a.method2
m2.method1()
m2("Peter")
执行此操作时,我发现该函数没有属性method1。
如何将method2用作带有参数的属性?
答案 0 :(得分:1)
您实际上是在打电话
m2 = a.method2.method1()
# but method2 has no method1.
如果您想使用method2,则可以使用此方法进行调用
m2 = a.method2("Peter")
答案 1 :(得分:1)
根据您的规范...
a = A()
A
必须是一个类(或者至少是可返回对象的可调用类)……
m2 = a.method2
…具有属性method2
的属性,该属性是/返回对象…
m2.method1()
…具有可调用的method1
…
m2("Peter")
...并且也可以自己调用。
假设method2
返回的对象与a
是相同的实例,可以这样实现:
class A:
@property
def method2(self):
return self
def method1(self):
print('Hello')
def __call__(self, name):
print('Hello', name)
您可以向后弯腰以使method2
具有属性method1
,但是对于您想要的行为,这似乎是最明智的。或者,您可能想返回一些具有相同特征的对象,而不是返回self
中的method2
。另外,除了将method2
实现为@property
之外,您也可以只在self.method2 = ...
中执行__init__
。