如何从客户端访问超类方法?

时间:2015-08-21 13:30:43

标签: python oop

我是Python的新手,我在“dao”包下面有以下简单的层次结构:

class BaseDao:
    def __init__(self):
        self.connection = ... # initialize the connection
        self.connection.autocommit = False

    def get_connection(self):
        return self.connection

    def close(self):
        self.connection.close()

class PriceMomentumDao(BaseDao):
    def __init__(self):
        super(PriceMomentumDao, self).__init__()

现在是我的客户代码:

import from dao PriceMomentumDao

myDao = PriceMomentumDao
myDao.get_connection()

然后我收到错误:

AttributeError: 'module' object has no attribute 'get_connection'

1 个答案:

答案 0 :(得分:2)

这里有两件事是错的:

  • 你给你的模块和包含的类一样,增加了你的困惑(Python不要求你这样做,这是一件Java事情)
  • 您没有创建该类的实例。

使用

myDao = PriceMomentumDao.PriceMomentumDao()

或调整导入:

from dao.PriceMomentumDao import PriceMomentumDao

# ...

myDao = PriceMomentumDao()

您可能需要注意Python styleguide, PEP 8中给出的建议,并使用price_momentum_dao作为模块名称。

如果这是Python 2,请确保您也继承object,否则您将无法使用super()等新式类功能:

class BaseDao(object):