面向对象的窗体
继承¶
继承指的是一个对象直接使用另一个对象的属性或方法
继承的格式: class 子类名(父类名): ...
继承定义¶
# 父类
class Person:
def __init__(self):
# 构造,初始化属性
self.name = 'itcast'
self.age = 20
def say_hello(self):
print('hello {}'.format(self.name))
# 子类
class Student(Person):
pass
if __name__ == '__main__':
stu = Student()
print(stu.name)
print(stu.age)
stu.say_hello()
Note
子类继承父类属性和方法
构造函数¶
# 父类
class Person:
def __init__(self, name, age):
# 构造,初始化属性
self.name = name
self.age = age
def say_hello(self):
print('hello {}'.format(self.name))
# 子类
class Student(Person):
pass
if __name__ == '__main__':
stu = Student('itheima', 30)
print(stu.name)
print(stu.age)
stu.say_hello()
Note
父类中如果构造改变,子类实例需要传入对应的参数。
子类覆写构造¶
# 父类
class Person:
def __init__(self, name, age):
# 构造,初始化属性
self.name = name
self.age = age
def say_hello(self):
print('hello {}'.format(self.name))
# 子类
class Student(Person):
def __init__(self, name, age, id):
# 需要去加载父类的构造
super(Student, self).__init__(name, age)
self.id = id
if __name__ == '__main__':
stu = Student('itheima', 30, '110')
print(stu.name)
print(stu.age)
print(stu.id)
stu.say_hello()
Note
由于业务功能原因,如果子类需要覆写父类的构造,那么:
- 定义自己的
__init__
构造函数 - 在自己的
__init__
中加载父类的构造,见18行
Qt窗口继承¶
继承QWidget¶
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.setWindowTitle('title')
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
Note
通过继承QWidget
来实现窗体
在构造中,必须实现super
函数的调用,否则将出行错误
私有化¶
在python的类中,通常采用__名称
来定义私有化的属性和函数。
私有化变量¶
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.setWindowTitle('title')
self.__hello = 'hello'
self.hi = 'hi'
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.__hello
window.hi
window.show()
sys.exit(app.exec_())
Note
在类中,定义了__hello
和_hi
变量.
在外部使用过程中:
- 第21行,
window.__hello
这个访问是不被允许的 - 第22行,
window.hi
这个是可以访问的
私有化函数¶
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class MyWindow(QWidget):
def __init__(self):
super(MyWindow, self).__init__()
self.setWindowTitle('title')
self.__init_ui()
def __init_ui(self):
layout = QHBoxLayout()
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MyWindow()
window.__init_ui()
window.show()
sys.exit(app.exec_())
Note
在类中,定义了__init_ui
函数.
- 第24行,外部调用此函数时,是无法访问的
- 第12行,内部调用是可以的。
定义原则¶
- 当属性只是当前类使用时,就将其作为私有的
- 当函数只是当前类使用时,就将其作为私有的