Python: наследование класса / ошибка AttributeError при вызове дочернего класса - PullRequest
0 голосов
/ 09 ноября 2019

Я застрял, пытаясь решить проблему наследования, и надеялся, что кто-то может мне помочь, у меня есть дочерний класс с именем GetConnection, который наследует от класса GetConfig.

Дочерний класс получает параметры, которые проверяются по даннымхранится в файле yaml родительским классом. Родительский класс также загружает файл yaml, который впоследствии используется для создания строки подключения.

Однако я получаю эту ошибку, и мне кажется, что ничего не работает: «AttributeError:« Объект GetConnectionLiterals 'не имеет атрибута »_GetConnectionLiterals__check_values ​​'"

Если кто-то может указать, что мне не хватает, я был бы очень признателен. Спасибо

Клаудио

import yaml
"""
Class created to read yaml files 
and extract requested literals seamlessly
"""

class GetConfig:
    @staticmethod
    def __check_values(*args):
        yaml = args[0]
        keys = args[1:]
        integrity = True
        arguments = [y for y, in yaml.items() if y not in keys]
        if len(arguments) > 0:
            integrity = False
        return integrity, arguments

    @classmethod
    def __load_yml(cls, yml_string):
        with open("{}.yml".format(yml_string), 'r') as stream:
                config = yaml.safe_load(stream)
        return config


class GetConnection(GetConfig):
    def __init__(self, server_name, username, db):
        """
        Generate database connection strings
            Arguments:
            :param server_name: as alphanumeric string
            :param username: as alphanumeric string
            :param db: as alphanumeric string
        """
        integrity, params = self.__check_values(self.__load_yml('connection_info'), server_name, username, db)
        if integrity is False:
            quit()
        self.server_name = server_name
        self.username = username
        self.db = db

    def __get_db_scope_access(self):
        config = self.__load_yml('connection_info')
        server = config['server'][self.server_name]['connection_string']
        user = config['server']['A']['databases'][self.db]['db_credentials'][self.username][0]
        passw = config['server']['A']['databases'][self.db]['db_credentials'][self.username][1]
        db = self.db
        return server, db, user, passw, config


if __name__ == "__main__":
    instance = GetConnection('A', 'claudio', 'mmd1')
    print(instance)
    str = instance.connection_string('mssql')
    print(str)

1 Ответ

1 голос
/ 09 ноября 2019

Это потому, что ваш метод начинается с __ (искажение имени). Это называется dunder и было специально сделано для защиты от простого переопределения наследования. Измените __ на что-то вроде _.

. Хороший блог об этом можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...