调用inspect.getmro()时,对象没有属性“\uu\u”

szqfcxe2  于 2022-11-03  发布在  Storm
关注(0)|答案(1)|浏览(590)

我有一个python类,它继承自apache storm multilang项目的storm.py。
我的班级如下:

import storm
class MyClassName(Storm.Bolt):
def initialize(self,conf,context):
     self._conf = conf;
     self._context = context
def process(self, in_tuple):
     storm.ack(in_tuple)
if __name__ == '__main__':
     MyClassName().run()

我将python文件(myfilename.py)复制到/usr/lib64/python2.7/site-package。然后我登录到pythonshell并执行了一个 import myfilename . 没有错误地完成了。当我运行以下命令时 inspect.getmro(myfilename.MyClassName()) 我得到以下错误:

AttributeError: 'MyClassName' object has no attribute '__bases__'

我的印象是,当我宣布我的班级,并通过它 Storm.Bolt 我在扩展 Storm.Bolt . 我的问题是:
我需要定义吗 __bases__ 在我班上?
我还缺什么?
在centos7上使用Python2.7.13。storm版本是1.1.0

mqkwyuun

mqkwyuun1#

这个 inspect.getmro 函数期望它的参数是一个类,但您正在向它传递一个示例。去掉调用类的括号,代码应该可以工作:

inspect.getmro(myfilename.MyClassName) # not MyClassName()!

如果您在问题中给出的调用是一个简化的示例,并且您在调用的地方没有直接可用的类 getmro 在示例上,可以使用 type 要获得课程:

obj = SomeClass()  # this happens somewhere earlier on, and we don't know SomeClass below

inspect.getmro(type(obj))   # but we can easily get it using type()

相关问题