10.4 类改造
10.4.4 super
10.4.3 多继承
多继承意思就是一个类同时继承了多个父类
10.4.2 单继承
10.4.1 继承 Inheritance
不不由任意内置类型派⽣生出的类,称之为经典类。
在原有类功能的基础上,增加新的功能(属性或者方法),形成新的子类。被继承的叫父类。
Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法。
语句格式
class 子类名(父类名)
class 子类名(父类名1,父类名2,父类名3…)
- 经典类
class 类名:
代码
......
- 新式类
class 类名(object):
代码
......
# 继承:子类默认继承父类的所有属性和方法
# 1. 定义父类
class A(object):
def __init__(self):
self.num = 1
def info_print(self):
print(self.num)
# 2. 定义子类 继承父类
class B(A):
pass
# 3. 创建对象,验证结论
result = B()
result.info_print()
用继承实现Box1类的继承
继承步骤:
- 在子类声明时,引入父类Box2(Box1)
- 重新定义子类的__init__函数,若父类__init__函数有参数,则照抄父类的函数
- 在子类__init__函数里提供super函数,实现父类和子类的关联,若父类有参数,需要同步参数(无self)
- 在子类中增加新的属性定义
- 在子类中增加新的方法method定义
# 类定义,类名为Box1
class Box1():
'''求立方体的类'''
# 传递类参数的保留函数
def __init__(self, lenght1, with1, height1):
# 属性定义,长宽高
self.lenght = lenght1
self.width = with1
self.height = height1
# 方法定义
# 求立方体体积的函数volume,并供实例调用
def volume(self, num = 1):
return self.lenght*self.height*self.width*num
class Box2(Box1):
def __init__(self, lenght1, with1, height1):
# super实现父类与子类的关联
super().__init__(lenght1, with1, height1)
self.color1 = 'white'
self.material1 = 'paper'
self.type1 = 'fish'
def area(self):
re = self.lenght*self.width+self.lenght*self.height+self.width*self.height
return re*2
# 重新定义
def volume(self, num=1):
return self.lenght * self.height * self.width * num
# 实例名.方法名
my_box2 = Box2(10, 10, 10)
value = my_box2.volume()
print('立方体的体积是:%d' % (my_box2.volume()))
print('立方体的表面积是:%d' % (my_box2.area()))
# 重写方法
print('5个立方体的体积是:%d' % (my_box2.volume(5)))
print('颜色:', my_box2.color1)
print('材质:', my_box2.material1)
print('类型:', my_box2.type1)
# print('颜色:%s,材质:%s,类型:%s' % (my_box2.color1(), my_box2.material1, my_box2.type1))
10.4.2 重写方法
def volume(self, num = 1):
return self.lenght*self.height*self.width*num
10.3 属性
10.3.1 属性值初始化
在__init__;直接初始化值
self.lenght = 0
self.width = 0
self.height = 0
传递参数初始化
10.3.2 属性值修改
直接对属性值进行修改
# 类定义,类名为Box1
class Box1():
'''求立方体的类'''
def __init__(self):
# 属性定义,长宽高
self.lenght = 0
self.width = 0
self.height = 0
B1 = Box1()
# 读取属性值
print(B1.lenght)
B1.lenght = 10
print(B1.lenght)
B2 = Box1()
B2.lenght = 20
print(B2.lenght)
通过method对属性值修改
# 类定义,类名为Box1
class Box1():
def __init__(self):
# 属性定义,长宽高
self.lenght = 0
self.width = 0
self.height = 0
# 定义修改属性length的函数
def setNewLength(self,length1):
self.lenght = length1
B1 = Box1()
# 通过setNewLength修改
B1.setNewLength(15)
# 修改后的值
print(B1.lenght)
10.3.3 把类赋给属性
把颜色类赋给颜色属性
class Color1():
def __init__(self, index=0):
# index指定颜色列表下标
# 定义列表类颜色属性
self.set_color = ['white', 'red', 'black', 'green']
# 定义下标属性,为了可以在实例之间传递
self.index = index
def setColor(self):
return self.set_color[self.index]
class Box1():
'''求立方体的类'''
def __init__(self, lenght1, with1, height1, c1=0):# 传递类参数的保留函数
# 属性定义,长宽高
self.lenght = lenght1
self.width = with1
self.height = height1
self.color0 = Color1(c1).setColor()
# 方法定义
# 求立方体体积的函数volume,并供实例调用
def volume(self):
return self.lenght*self.height*self.width
my_box1 = Box1(10,10,10,1)
print(my_box1.color0)
red
10.2 实例(Instance)
10.2.1实例实现
my_box1 = Box1(10, 10, 10)的赋值过程,就是建立类Box1的一个实例对象过程。
10.2.2 多实例
同一个类可以给多个实例对象赋值,那就是多例。每个实例之间互不干扰。
实例中调用的volume()是方法,不是函数。
在类中,volume()称为方法、函数都可以。
my_box2 = Box1(3, 10, 10)
print('立方体的体积是:%d' % (my_box2.volume()))
my_box3 = Box1(10, 5, 9)
print('立方体的体积是:%d' % (my_box3.volume()))
立方体的体积是:300
立方体的体积是:450
10.2.3 实例的属性、方法
属性调用语句格式
# 实例名.属性名
tt = my_box1.lenght
print(tt)
方法调用语句格式
# 实例名.方法名
my_box1 = Box1(10, 10, 10)
value = my_box1.volume()
10.1 类
面向过程的编程(procedure oriented,PO)
以过程为中心的编程方法
面向对象的编程(object oriented,OO)
10.1.1 类class
把具有相同特性(数据)和行为(函数)的对象抽象为类。
数据通过类内的局部变量来实现对数据的读写操作。
函数可以实现对类的相关行为的操作。
示例:
抽象成类的过程:
- 归类
- 提取事物的特性
- 确定时代物相关的操作行为
示例: 体积函数类
# 类定义,类名为Box1
class Box1():
'''求立方体的类'''
def __init__(self, lenght1, with1, height1):# 传递类参数的保留函数
# 属性定义,长宽高
self.lenght = lenght1
self.width = with1
self.height = height1
# 方法定义
# 求立方体体积的函数volume,并供实例调用
def volume(self):
return self.lenght*self.height*self.width
my_box1 = Box1(10, 10, 10)
print('立方体的体积是:%d' % (my_box1.volume()))
10.1.2 知识点
class关键字:所有的类定义必须以class开始。
类名:约定类名首字母需要大写,增加阅读性。
类的语句格式
class 类名():
类文档说明
用3个单引号,是使用方法和函数的文档说明时一样的。
类函数(方法(method))
类函数在类或者实例中又称方法(method)。
方法必须依赖类或者实例存在。
以上算法中包括__init__和volume两个函数。