确保Python中没有_init__函数
我正在编写一个基于插件的应用程序。插件规范的一部分是,插件不得实现确保Python中没有_init__函数,python,class,oop,initialization,python-import,Python,Class,Oop,Initialization,Python Import,我正在编写一个基于插件的应用程序。插件规范的一部分是,插件不得实现\uuuu init\uuuu方法,因为任何初始化都需要由插件管理器处理,而不是插件本身。(插件编写器将用另一种方法定义它们的启动代码,在满足某些检查后由插件管理器调用。) 如果使用\uuuu init\uuuu,插件管理器应该会失败、抛出异常或执行其他一些令人沮丧的操作来强制执行此样式 我想我可以检查一下\uuuuu init\uuuu是否已定义: #minimatest.py __meta_u=“最小元数据” #main.p
\uuuu init\uuuu
方法,因为任何初始化都需要由插件管理器处理,而不是插件本身。(插件编写器将用另一种方法定义它们的启动代码,在满足某些检查后由插件管理器调用。)
如果使用\uuuu init\uuuu
,插件管理器应该会失败、抛出异常或执行其他一些令人沮丧的操作来强制执行此样式
我想我可以检查一下\uuuuu init\uuuu
是否已定义:
#minimatest.py
__meta_u=“最小元数据”
#main.py
导入最小值测试
hasattr(最小测试,'.'.'元'.''.=>真
hasattr(minimatest,“\uuuu somethingimadeup”\uuuuu')\u35;=>False
hasattr(最小测试,'.'初始'.''.=>真的?!
问题:hasattr
调用总是返回True
我如何确保任何潜在的插件脚本都没有实现
\uuuuu init\uuuu
方法?hasattr返回True
,因为我们创建的最小类继承自对象
,它与定义的方法一起提供
如果我们想知道我们的最小类
有哪些方法,而不需要得到它的超类
定义的方法,您可以调用\uuu dict\uuu
并获得一个列表
,该列表使用键可以简单地进行测试:
如果“\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
raise RUNTIMERROR(“插件可能不定义初始化方法”)