super(1)
super(2)
多继承意思就是一个类同时继承了多个父类
不不由任意内置类型派⽣生出的类,称之为经典类。
在原有类功能的基础上,增加新的功能(属性或者方法),形成新的子类。被继承的叫父类。
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
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))
def volume(self, num = 1):
return self.lenght*self.height*self.width*num
self.lenght = 0
self.width = 0
self.height = 0
# 类定义,类名为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)
# 类定义,类名为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)
把颜色类赋给颜色属性
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
my_box1 = Box1(10, 10, 10)的赋值过程,就是建立类Box1的一个实例对象过程。
同一个类可以给多个实例对象赋值,那就是多例。每个实例之间互不干扰。
实例中调用的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
# 实例名.属性名
tt = my_box1.lenght
print(tt)
# 实例名.方法名
my_box1 = Box1(10, 10, 10)
value = my_box1.volume()
面向过程的编程(procedure oriented,PO)
以过程为中心的编程方法
面向对象的编程(object oriented,OO)
把具有相同特性(数据)和行为(函数)的对象抽象为类。
数据通过类内的局部变量来实现对数据的读写操作。
函数可以实现对类的相关行为的操作。
示例:
抽象成类的过程:
# 类定义,类名为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()))
class 类名():
用3个单引号,是使用方法和函数的文档说明时一样的。
类函数在类或者实例中又称方法(method)。
方法必须依赖类或者实例存在。
以上算法中包括__init__和volume两个函数。