如何正确导入数据库连接类并创建连接?解决self参数缺失错误
解决实例方法调用的TypeError问题
错误原因
establish_connection_general是实例方法,这类方法必须通过类的实例调用——Python会自动把实例作为第一个参数(self)传入方法。直接用类名调用时,没有传入这个必要的实例参数,因此触发missing 1 required positional argument: 'self'错误。
正确实现方式
方式1:实例化类后调用方法(推荐,适用于方法需要访问实例属性的场景)
- 导入类(假设两个文件在同一目录下)
# database_connection.py 中的导入代码 from Database_main import Database_connection
- 创建类实例并调用方法
# 创建Database_connection类的实例 db_instance = Database_connection() # 调用实例方法 db_connection = db_instance.establish_connection_general()
方式2:将方法改为静态方法(适用于方法不需要访问实例/类属性的场景)
如果数据库连接逻辑不依赖类的实例属性,可给方法加上@staticmethod装饰器,直接通过类名调用:
# Database_main.py 中的修改 from PyQt5.QtWidgets import QWidget class Database_connection(QWidget): # 其他代码... @staticmethod def establish_connection_general(): # 数据库连接逻辑(此处不能使用self访问实例属性) pass
调用方式(无需实例化):
# database_connection.py 中的调用 from Database_main import Database_connection db_connection = Database_connection.establish_connection_general()
方式3:将方法改为类方法(适用于方法需要访问类属性的场景)
如果需要访问类级别的属性,可用@classmethod装饰器,方法第一个参数为cls(代表类本身):
# Database_main.py 中的修改 from PyQt5.QtWidgets import QWidget class Database_connection(QWidget): # 类属性示例 db_config = {"host": "localhost", "port": 3306} # 其他代码... @classmethod def establish_connection_general(cls): # 通过cls访问类属性 print(f"使用配置: {cls.db_config}") # 数据库连接逻辑 pass
调用方式(无需实例化):
# database_connection.py 中的调用 from Database_main import Database_connection db_connection = Database_connection.establish_connection_general()
内容的提问来源于stack exchange,提问作者tckraomuqnt
相关产品推荐
相关产品推荐

