确保Python中没有__init__函数

时间:2019-04-21 21:08:36

标签: python class oop initialization python-import

我正在编写一个基于插件的应用程序。插件规范的一部分是,插件不能实施__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方法?

1 个答案:

答案 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>