Python中ABC抽象类中的__init__

rryofs0p  于 2023-03-07  发布在  Python
关注(0)|答案(1)|浏览(133)

在下面的示例中,我需要从MySQLdatabase类调用super().__init__()还是不需要?
如果我覆盖了MySQL数据库中的__init__,那么我认为超类的__init__不再被调用,这是否意味着ABC类的__init__不再被调用?

class Database(ABC):

    @abstractmethod
    def open_db_connection(self):
        pass
class MySQLdatabase(Database):

    def __init__(self):
        self.db_connection = None
        self.db_cursor = None
        self.record = None
        self.record_dict = None

    def open_db_connection(self) -> tuple[MySQLConnection, MySQLCursor]:
        try:
            self.db_connection = mysql.connector.connect(
                                                    host=HOST,
                                                    user=USERNAME,
                                                    password=PASSWORD,
                                                    port=PORT,
                                                    database=DATABASE_SCHEMA
            )
            if self.db_connection.is_connected():
                self.db_cursor = self.db_connection.cursor(prepared=True, dictionary=True)
                return self.db_connection, self.db_cursor
        except mysql.connector.Error as e:
            raise DatabaseException("error", f"while connecting to db: Database Connection Failed! error: {e}")
kq4fsx7k

kq4fsx7k1#

如果Database没有__init__方法,那么你就不需要在它的子类中调用super().__init__,但是包含这个调用并没有坏处,如果你以后在子类中添加了一个__init__方法,它也会保护你。

相关问题