如何在Python类中按顺序调用未定义的方法

时间:2017-01-29 09:42:42

标签: python oop

使用 getattr ,我可以这样做:myclass.method1()

但我正在寻找类似myclass.method1().method2()myclass.method1.method2()的内容。

这意味着method1method2未在班级中定义。

有没有办法在Python类中按顺序调用未定义的方法

3 个答案:

答案 0 :(得分:0)

我不太确定,但似乎你所谓的未定义的方法实际上是一个普通的方法,你只想通过名字调用(因为你显然不能调用的是真的没有定义。)

在这种情况下,你可以根据需要多次嵌套getattr,这是一个例子:

class Test:
    def method_test(self):
        print('test')


class Another:
    def __init__(self):
        self._test = Test()
    def method_another(self):
        print('Another')
        return self._test

another = Another()
getattr(
    getattr(another, 'method_another')(),
    'method_test'
)()

最后一个陈述实际上是another.method_another().method_test()

答案 1 :(得分:0)

这正是我所寻找的:

class MyClass:
    def __getattr__(self, name):
        setattr(self, name, self)
        def wrapper(*args, **kwargs):
            # calling required methods with args & kwargs
            return self
        return wrapper

然后我可以按顺序调用未定义的方法:

myclass = MyClass()
myclass.method1().method2().method3()

答案 2 :(得分:0)

@Mortezaipo:您应该将属性设置为包装器方法,否则您只能调用未定义的方法一次:

class MyClass:
    def __getattr__(self, name):
        def wrapper(*args, **kwargs):
            # calling required methods with args & kwargs
            return self
        setattr(self, name, wrapper)
        return wrapper