对象没有属性' __ bases __'在调用inspect.getmro()

时间:2018-02-06 18:29:39

标签: python-2.7 inheritance apache-storm

我有一个从Apache Storm MultiLang项目继承自storm.py的python类。

我的课程如下:

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。然后我登录到python shell并执行了import myfilename。完成没有错误。当我运行以下inspect.getmro(myfilename.MyClassName())时,我收到以下错误:

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

我的印象是,当我宣布我的课程并通过Storm.Bolt时,我正在扩展Storm.Bolt。我的问题是:

  • 我是否需要在班上定义__bases__
  • 我还缺少什么?

在CentOs7上使用Python 2.7.13。风暴版本是1.1.0

1 个答案:

答案 0 :(得分:1)

inspect.getmro函数希望它的参数是一个类,但是你要将它传递给一个实例。摆脱调用类的括号,你的代码应该工作:

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

如果您在问题中提供的电话是一个简化示例,并且您没有直接在课程中调用getmro的课程,则可以使用{{1}获得课程:

type