1 python类属性继承和定制
python通过子类继承父类,并定制特有属性,而不需要对父类进行修改。
python通过类继承实现程序的分解和定制。
1.1 python属性继承
python类产生实例对象,类继承于超类。
python类通过继承成为超类的子类。
NO | 类 | 描述 |
---|---|---|
1 | 超类 | 搜索树中位置较高的类称为超类。 |
2 | 子类 | 搜索树中位置较低的类称为子类。 |
子类通过继承获得超类的属性(数据属性和方法属性)。
NO | # | 描述 |
---|---|---|
1 | 超类位置 | 超类列在class语句后的括号内,多个超类用逗号分隔,称为多重继承。 |
2 | 类属性继承 | 子类继承超类的全部属性。读取属性时,从子类开始,再按从下到上,从左到右的属性,在超类里面读取。 |
3 | 实例属性继承 | 实例继承类的全部可读属性。读取属性时,从实例开始,再到类,最后到超类。 |
4 | 点号运算 | 包括“类.属性”、“实例.属性”、“self.属性”,将按从下到上,从左到右的顺序对类树进行搜索。 |
5 | 程序定制 | 通过子类定制超类的逻辑,而不是修改超类程序。子类可以重现定义超类的属性,也可以新增子类自己的属性。 |
1.2 python继承类
用法
class 子类(超类1,...,超类n):
#新增定制属性
子类变量=值
子类方法(self):pass
#覆盖超类属性
超类同名变量=值
超类同名方法(self):pass
描述
python子类继承超类后,可以新增子类自己的属性,进行定制。
也可以修改超类同名属性,进行定制。
也可以不增不改直接继承超类属性。
文件
E**😗*\documents\F盘\testclass.py
class MyClassA:
s = 'MyClassA.s'
x = 'MyClassA.x'
y = [1,2,3]
def setData(self,value):
print('MyClassA.setData.self.data={}={}'.format(value,self))
self.data = value
def display(self):
print('MyClassA.display.self.data={}={}'.format(self.data,self))
class MyClassB(MyClassA):
x = 'MyClassB.x'
m = 'MyClassB.m'
def display(self):
print('MyClassB.display.self.data={}={}'.format(self.data,self))
def bmethod(self):
print('MyClassB.bmethod')
if __name__ == '__main__':
b1=MyClassB()
# b1.s 继承 MyClassA
print('b1.s={}'.format(b1.s))
# b1.x 覆盖 MyClassA,取 MyClassB
print('b1.x={}'.format(b1.x))
# b1.setData 继承 MyClassA
b1.setData('b1')
# b1.display 覆盖 MyClassA,取 MyClassB
b1.display()
# b1.m 为 MyClassB 新增定制数据属性
print('b1.m={}'.format(b1.m))
# b1.bmethod 为 MyClassB 新增定制方法属性
b1.bmethod()
示例
# 打开cmd,执行下面示例
E:\documents\F盘>python testclass.py
b1.s=MyClassA.s
b1.x=MyClassB.x
MyClassA.setData.self.data=b1=<__main__.MyClassB object at 0x00F28C90>
MyClassB.display.self.data=b1=<__main__.MyClassB object at 0x00F28C90>
b1.m=MyClassB.m
MyClassB.bmethod