使用参数使函数可调用

时间:2019-07-30 11:07:36

标签: python

对于我的特定用例,我想在不评估方法的情况下分配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用作带有参数的属性?

2 个答案:

答案 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__