【问题标题】:Ensuring the absence of an __init__ function in Python确保 Python 中不存在 __init__ 函数
【发布时间】:2019-09-11 04:41:44
【问题描述】:

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

【问题讨论】:

    标签: python class oop initialization python-import


    【解决方案1】:

    hasattr 返回 True 以表示 __init__ 的存在,因为我们创建的最小 class 继承自 Object,它带有定义的方法。

    如果我们想查看我们最小的class 有哪些方法,没有得到它的superclass 定义的方法,你可以调用__dict__ 并得到一个list,这很简单使用.keys进行测试:

    if '__init__' in minimal.__dict__.keys():
        raise RuntimeError("Plugins may not define __init__ methods")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      相关资源
      最近更新 更多