我正在编写一个基于插件的应用程序。插件规范的一部分是,插件不能实施__init__
方法,因为任何初始化都需要由插件管理器而不是插件本身来处理。 (插件编写者会在满足某些检查条件后,用另一种方法定义启动代码,由插件管理器调用。)
要实施这种样式,如果正在使用__init__
,则插件管理器应该失败,引发异常或执行其他一些令人沮丧的操作。
我想我可以检查一下# minimaltest.py
__meta__ = "Minmimal metadata"
是否已定义:
# main.py
import minimaltest
hasattr(minimaltest, '__meta__') # => True
hasattr(minimaltest, '__somethingimadeup__') # => False
hasattr(minimaltest, '__init__') # => True?!
hasattr
问题:__init__
调用始终返回True
如何确定任何预期的插件脚本没有实现了hasattr
方法?
答案 0 :(得分:3)
True
因存在__init__
而返回class
,因为我们创建的最小Object
继承自class
,而该superclass
定义了该方法。 / p>
如果我们想查看最小的__dict__
有哪些方法,不获取其list
定义的方法,您可以调用.keys
并获得一个if '__init__' in minimal.__dict__.keys():
raise RuntimeError("Plugins may not define __init__ methods")
很容易通过使用int a = 0;
进行测试:
<int><a><=><0>