我正在编写一个基于插件的应用程序。插件规范的一部分是插件不得实现__init__
方法,因为任何初始化都需要由插件管理器处理,而不是插件本身。 (插件编写者会在另一种方法中定义他们的启动代码,在满足某些检查后由插件管理器调用。)
要强制执行此样式,如果正在使用 __init__
,插件管理器应该失败、抛出异常或执行其他一些令人沮丧的操作。
我想我可以检查一下是否定义了 __init__
:
# minimaltest.py
__meta__ = "Minmimal metadata"
# main.py
import minimaltest
hasattr(minimaltest, '__meta__') # => True
hasattr(minimaltest, '__somethingimadeup__') # => False
hasattr(minimaltest, '__init__') # => True?!
问题:hasattr
调用总是返回 True
我如何确保任何预期的插件脚本没有实现__init__
方法?
最佳答案
对于 __init__
的存在,hasattr
返回 True
,因为我们创建的最小 class
继承自 Object
,随定义的方法一起提供。
如果我们想查看我们的最小类
有哪些方法,无需获取其父类(super class)
定义的方法,您可以调用__dict__
并得到一个 list
,它很容易使用 .keys
进行测试:
if '__init__' in minimal.__dict__.keys():
raise RuntimeError("Plugins may not define __init__ methods")
关于python - 确保 Python 中不存在 __init__ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786764/