Python 函数调用类中的函数
我有一个问题,我想要一个调用或执行类中所有函数的函数Python 函数调用类中的函数,python,python-3.6,Python,Python 3.6,我有一个问题,我想要一个调用或执行类中所有函数的函数 class example: def foo(self): print("hi") def bar(self): print("hello") def all(self): self.foo() self.bar() 有没有更好的办法?因为我的类有大约20个函数,我只需要一个函数来调用它们。 感谢了解如何使用inspect或dir登记方法 虽然所有这些都
class example:
def foo(self):
print("hi")
def bar(self):
print("hello")
def all(self):
self.foo()
self.bar()
有没有更好的办法?因为我的类有大约20个函数,我只需要一个函数来调用它们。
感谢了解如何使用inspect或dir登记方法
虽然所有这些都很丑陋,但检查是首选的方法。
您可以通过inspect调用对象的所有方法
import inspect
class A:
def h(self):
print ('hellow')
def all(self):
for name, f in inspect.getmembers(self, predicate=inspect.ismethod):
if name != 'all' and not name.startswith('_'):
f()
a = A()
a.all()
如果您喜欢dir,可以尝试-catch getattr(self,attr)()
我将其放在一起并对其进行了测试,它似乎可以工作,不需要任何库,并遵循您的原始意图:
class example:
def __init__(self):
n = self.__class__.__name__
self.method_list = [func for func in dir(eval(n)) \
if callable(getattr(eval(n), func)) \
and func[0]!='_' \
and func!='run_all']
def foo(self):
print("hi")
def bar(self):
print("hello")
def run_all(self):
for m in self.method_list:
runstring = 'self.' + m + '()'
eval(runstring)
使用它:
>> a = example()
>> a.run_all()
hello
hi
all
是一个Python命令,因此我将您的方法重命名为run\u all
func!='“全部运行”
是必需的,这样您就不会出现令人讨厌的递归情况
让您列出方法,我限制它只是为了不列出私有方法
self.\uuuuu class\uuuu.\uuuu name\uuuu
获取您的类名虽然我不确定这是否是最好的方法,但我建议如下
class AClass():
def my_method_1(self):
print('inside method 1')
def my_method_2(self):
print('inside method 2')
def run_my_methods():
executor = AClass()
all_methods = dir(executor)
#separate out the special functions like '__call__', ...
my_methods = [method for method in all_methods if not '__' in method]
for method in my_methods:
eval('executor.%s()'%method)
run_my_methods()
输出为
inside method 1
inside method 2
应该可以对所有方法进行迭代,但不会很好。您可以使用inspection,但会很好地工作,而不是正确地尝试检查您可以尝试调用每个成员的类型。如果有的话,静态或类方法可能没有什么问题。唯一的问题是,当函数返回打印时,它会工作。但是,在我的类中,每个函数都返回一个元素列表,这些元素与此代码不起作用。
inside method 1
inside method 2