那super().__init__(n)可以写成super(Student,self).__init__(n)或者Person.__init__(self,n)吗。两者有什么区别?
时间: 2023-08-07 09:50:52 浏览: 74
`super().__init__(n)` 可以写成 `super(Student,self).__init__(n)`,两者是等价的。`super()` 函数返回一个代理对象,可以用来调用父类的方法。其中的 `super(Student, self)` 表示返回 `Student` 的父类,`self` 表示当前实例对象。通过 `super(Student, self).__init__(n)` 调用父类的构造函数,实现正确的属性初始化。
`Person.__init__(self, n)` 也可以实现相同的功能,它直接调用了父类的构造函数,传入当前实例对象 `self` 和参数 `n`。但是这种方式不够灵活,如果你将 `Student` 继承的父类改为了其他类,那么这里的 `Person` 就需要相应地修改为新的父类名称。
因此,建议使用 `super().__init__(n)` 的方式来调用父类的构造函数,这样更加灵活,而且在多继承的情况下也可以正确地调用父类的构造函数。
相关问题
class Student: def __init__(self,lyh_a,lyh_b): self._name=lyh_a self._no=lyh_b def say(self): print("姓名:",self._name) print("学号:",self._no) class UndergraduateStudent(Student): def __init__(self, lyh_a, lyh_b,lyh_c): super(UndergraduateStudent,self).__init__(lyh_a, lyh_b) self._College=lyh_c def show(self): super().say() print("学院:",self._College) us1 = UndergraduateStudent("李四","123456","信息工程学院") us1.show()
这段代码是一个简单的面向对象的Python程序,定义了两个类:`Student`和`UndergraduateStudent`。`UndergraduateStudent`是`Student`的子类,继承了`Student`的属性和方法,并且在此基础上增加了自己的属性和方法。
`Student`类有一个构造函数`__init__`,接收两个参数`lyh_a`和`lyh_b`,用来初始化学生的姓名和学号。`say`方法用来打印学生的姓名和学号。
`UndergraduateStudent`类也有一个构造函数`__init__`,接收三个参数`lyh_a`、`lyh_b`和`lyh_c`,分别代表学生的姓名、学号和所在学院。在构造函数中,通过调用父类`Student`的构造函数,初始化了学生的姓名和学号,并且新增了`_College`属性用来保存学生所在的学院。`show`方法用来打印学生的姓名、学号和学院信息,它通过调用父类`Student`的`say`方法来打印姓名和学号,然后再打印学院信息。
最后,通过创建一个`UndergraduateStudent`对象`us1`,并调用其`show`方法,输出该学生的信息。
class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self, parent=None): super(MainWindow, self).__init__(parent) self.setupUi(self) # 连接数据库 self.db = QSqlDatabase.addDatabase('QMYSQL') self.db.setHostName('localhost') self.db.setUserName('root') self.db.setPassword('password') self.db.setDatabaseName('student') if not self.db.open(): print('无法连接数据库') sys.exit(1) # 初始化表格模型 self.model = QSqlTableModel(self) self.model.setTable('student') self.model.select() # 设置表格视图 self.tableView.setModel(self.model) # 设置信号槽连接 self.addButton.clicked.connect(self.add_student) self.modifyButton.clicked.connect(self.modify_student) self.deleteButton.clicked.connect(self.delete_student) self.queryButton.clicked.connect(self.query_student)
这段代码定义了一个继承自 QMainWindow 和 Ui_MainWindow 的 MainWindow 类,用于创建主窗口。在 __init__ 方法中,首先调用了父类的构造函数,然后调用了 setupUi 方法初始化了主窗口的界面。接下来,通过 QSqlDatabase 模块连接了一个 MySQL 数据库,并设置了连接信息。如果无法连接数据库,就会输出错误信息并退出程序。
然后,初始化了一个 QSqlTableModel 对象,并设置了它的数据表为 student,然后调用了 select 方法查询了该数据表中的所有数据,并将查询结果设置为模型的数据源。接着,将该模型设置为表格视图的数据源,使得表格视图能够显示数据。
最后,将添加按钮、修改按钮、删除按钮和查询按钮的 clicked 信号与对应的槽函数 add_student、modify_student、delete_student 和 query_student 进行了连接,以实现对数据库的增、删、改、查操作。
阅读全文