Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型对象DbTableExternal没有属性db\u path_Python - Fatal编程技术网

Python 类型对象DbTableExternal没有属性db\u path

Python 类型对象DbTableExternal没有属性db\u path,python,Python,我有一个抽象类 class DbTableCore(object): __metaclass__ = ABCMeta @abstractmethod def create_table(self): pass @abstractmethod def drop_table(self): pass @abstractmethod def insert_items(self, items): p

我有一个抽象类

class DbTableCore(object):
    __metaclass__ = ABCMeta

    @abstractmethod
    def create_table(self):
        pass

    @abstractmethod
    def drop_table(self):
        pass

    @abstractmethod
    def insert_items(self, items):
        pass

    @abstractmethod
    def select_items(self):
        pass

    @abstractmethod
    def update_items(items):
        pass
我想把一些属性传递给所有的子类,但我听说使用抽象类。我无法做到这一点-属性没有继承

所以我决定创建一个中间类,它不实现抽象类的方法——我只是
传递它们

class DbTableExternal(DbTableCore):

    def __init__(self):
        with open('app_config.ini') as file:
            cfg = process_ini(tuple(file))
            self.db_path = cfg.get('db_path')

    def create_table(self):
        pass

    def drop_table(self):
        pass

    def insert_items(self, items):
        pass

    def select_items(self):
        pass

    def update_items(items):
        pass
最后,我的子类继承了这个中间类

class ItemTable(DbTableExternal):

    def __init__(self):
        DbTableExternal.__init__(self)
        self.db_path = DbTableExternal.db_path
但是当我试着运行它时,我犯了一个错误

File "bla-bla", line 63, in __init__
  self.db_path = DbTableExternal.db_path # line 63
AttributeError: type object 'DbTableExternal' has no attribute 'db_path'
有什么问题吗

self.db_path = DbTableExternal.db_path
您不需要上面的行,因为
self.db\u path
将由super class'
\uuuu init\uu
方法设置。(
DbTableExternal.\uuuu init\uuuuuu(self)

您可以作为
self.db_path
(作为实例属性)访问属性,而不是作为
DbTableExternal.db_path
(作为类属性)访问属性