使用 getattr ,我可以这样做:myclass.method1()
但我正在寻找类似myclass.method1().method2()
或myclass.method1.method2()
的内容。
这意味着method1
,method2
未在班级中定义。
有没有办法在Python类中按顺序调用未定义的方法?
答案 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