python不能使用super(父)类中定义的属性

时间:2016-08-09 20:41:29

标签: python

这是我的代码

wget -e robots=off --wait 0.25 --recursive --no-parent ...

我收到了这个错误:

class ElasticsearchController(object):
     def __init__(self):
         self.es = Elasticsearch(['blabla'], port=9200)

class MasterDataIndexController(ElasticsearchController):
     def __init__(self):
         self.indexName = "bbbbb"
     def search(self, query):
         return super.es.search(index=self.indexName, docuemntType = self.documentType, query = query)

虽然超级确实拥有它。

请问好吗?

2 个答案:

答案 0 :(得分:4)

你没有初始化你的超级课程。

class ElasticsearchController(object):
     def __init__(self):
         self.es = Elasticsearch(['a.b.c.d'], port=1234)

class MasterDataIndexController(ElasticsearchController):
     def __init__(self):
         super(MasterDataIndexController, self).__init__()
         #^^^^^^^^^^^
         self.indexName = "bbbbb"

     def search(self, query):
         return self.es.search(index=self.indexName, docuemntType = self.documentType, query = query)
         #      ^^^^^ self should be fine.

答案 1 :(得分:3)

你不能那样使用supersuper将允许您访问超类,但不应将其用作self的快捷方式。根据您是否使用python或python 3,您可以调用super(MyClass, self)super()。您可以在初始化期间使用它来调用超类的__init__方法。

但是,在大多数简单的类层次结构中,没有必要调用super,如果只调用SuperClass.__init__(self),则代码会更清晰。

在此之后,您应该只能使用self和属性访问。