2017-01-29 29 views
0

隨着GETATTR,我能做到這樣的:myclass.method1()如何調用未定義的方法依次Python類

但是我正在尋找類似myclass.method1().method2()myclass.method1.method2()

這意味着method1,method2沒有在類中定義。

有沒有辦法在Python類中依次調用未定義的方法

+0

@hiroprotagonist例如'method1'和'method2'沒有在'myclass'中定義 – Mortezaipo

回答

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() 
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()

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 
相關問題