隨着GETATTR,我能做到這樣的:myclass.method1()
如何調用未定義的方法依次Python類
但是我正在尋找類似myclass.method1().method2()
或myclass.method1.method2()
。
這意味着method1
,method2
沒有在類中定義。
有沒有辦法在Python類中依次調用未定義的方法?
隨着GETATTR,我能做到這樣的:myclass.method1()
如何調用未定義的方法依次Python類
但是我正在尋找類似myclass.method1().method2()
或myclass.method1.method2()
。
這意味着method1
,method2
沒有在類中定義。
有沒有辦法在Python類中依次調用未定義的方法?
這到底是什麼,我已經找了:
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()
我真的不知道,但似乎你所呼叫的未定義的方法其實你只是想通過名字來稱呼(因爲你顯然不能調用真的沒有定義什麼正常的方法)。
在這種情況下,你可以窩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()
。
@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
@hiroprotagonist例如'method1'和'method2'沒有在'myclass'中定義 – Mortezaipo