如何通过字符串方法名称在类内调用python静态方法[重复]

Posted

技术标签:

【中文标题】如何通过字符串方法名称在类内调用python静态方法[重复]【英文标题】:How to invoke a python static method inside class via string method name [duplicate] 【发布时间】:2017-10-10 01:22:33 【问题描述】:

我定义了以下字符串,它们指定了 python 模块名称、python 类名称和静态方法名称。

module_name = "com.processors"
class_name = "FileProcessor"
method_name = "process"

我想调用method_name变量指定的静态方法。

我如何在 python 2.7+ 中实现这一点

【问题讨论】:

This 可能会有所帮助! 【参考方案1】:

您可以为此使用 importlib。 试试importlib.import(module +"." + class +"."+ method)

请注意,如果您通过 import module.class.method 导入,这个连接的字符串应该看起来完全一样

【讨论】:

【参考方案2】:

试试这个:

# you get the module and you import
module = __import__(module_name)

# you get the class and you can use it to call methods you know for sure
# example class_obj.get_something()
class_obj = getattr(module, class_name)

# you get the method/filed of the class
# and you can invoke it with method() 
method = getattr(class_obj, method_name)

【讨论】:

【参考方案3】:

使用__import__函数通过将模块名称作为字符串来导入模块。

使用getattr(object, name) 访问对象(模块/类或anything)中的名称

在这里你可以做

module = __import__(module_name)
cls = getattr(module, claas_name)
method = getattr(cls, method_name)
output = method()

【讨论】:

以上是关于如何通过字符串方法名称在类内调用python静态方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法在类内第二次设置字符串类型[关闭]

静态成员不能在类内初始化

python中cls关键字

python 面向对象(进阶篇)

单例模式

C++中静态成员变量的可以在类内初始化吗?