初试类
1、类(Class):指把具有相同特性(数据)和行为(函数)的对象抽象为类。数据通过类内的局部变量来实现对数据的读写操作,函数可以实现对类的相关行为的操作。
实例(Instance):是把类通过等号(=)赋值给一个变量的过程,就是实例化过程,这个变量就是实例。
2、代码
class Box1():
'''求立方体的类'''
def __init__(self,length1,width1,height1):
self.length=length1
self.width=width1
self.height=height1
def volume(self):
return self.length*self.width*self.height
def setNewLength(self,length1):
self.length=length1
my_box1=Box1(10,10,10)
print('立方体的长度:',my_box1.length)
print('立方体体积是%d'%(my_box1.volume()))
属性使用
1、属性(Property):是通过__init__函数定义,并通过self传递给实例的一种数据类型。
2、属性值初始化
1> 在__init__里直接初始化
def __init__(self):
self.length=0
self.width=0
self.height=0
2> 传递参数初始化
def __init__(self,length1,width1,height1):
self.length=length1
self.width=width1
self.height=height1
3、属性值修改
1> 直接对属性值进行修改
my_box1.length=20
2> 通过方法对属性值进行修改
def setNewLength(self,length1):
self.length=length1
4、把类赋给属性
class Color1():
def __init__(self,index=0):
self.set_color=['white','red','black','green']
self.index=index
def setColor(self):
return self.set_color[self.index]
class Box2():
def __init__(self,length1,width1,heigth1,c1=0):
self.length=length1
self.width=width1
self.heigth=heigth1
self.color0=Color1(c1).setColor()
def volume(self):
return self.length*self.width*self.height
my_box2=Box2(10,10,10,1)
print(my_box2.color0)
类改造问题
1、继承(Inheritance):就是在继承原有类功能的基础上,增加新的功能(属性或方法),形成新的子类。
2、代码
class Box3(Box1):
'''求立方体的类'''
def __init__(self,length1,width1,height1):
super().__init__(length1,width1,height1)
self.color='white'
self.material='paper'
self.type='fish'
def area(self):
re=self.length*self.width+self.length*self.height+self.width*self.height
return re*2
def volume(self,num=1):
return self.length*self.width*self.height*num
my_box3=Box3(10,10,10)
print('立方体的表面积是:',my_box3.area())
print('5个立方体体积是%d'%(my_box3.volume(5)))
print('Box颜色%s,材质%s,类型%s'%(my_box3.color,my_box3.material,my_box3.type))
私有
私有(private):类内私有的变量和函数只允许这个类自身访问,没有被实例调用的权利。
操作:在变量名或函数名前加上双下划线__
把类放到模块中
Class_module.py
class Box1():
'''求立方体的类'''
def __init__(self,length1,width1,height1):
self.length=length1
self.width=width1
self.height=height1
def volume(self):
return self.length*self.width*self.height
def setNewLength(self,length1):
self.length=length1
class Box4(Box1):
'''求立方体的类'''
def __init__(self,length1,width1,height1):
super().__init__(length1,width1,height1)
self.color='white'
self.material='paper'
self.type='fish'
def area(self):
re=self.length*self.width+self.length*self.height+self.width*self.height
return re*2
def volume(self,num=1):
return self.length*self.width*self.height*num
from Class_module import *
my_box4=Box4(10,10,10)
print('立方体的表面积是:',my_box4.area())
print('6个立方体体积是%d'%(my_box4.volume(6)))
print('Box颜色%s,材质%s,类型%s'%(my_box4.color,my_box4.material,my_box4.type))
类回顾
1、静态类:不支持实例化的类(数据+函数)
动态类:可以创建实例的类(属性+方法)
静态类和动态类的关键区别:
静态类内部没有self关键字,不能被实例化
静态类不能通过类名传递参数
静态类不支持__init__初始化函数
静态类不能被真正实例化,但是它可以集成变量或函数,是一个带结构的数据类型
class StaticC():
name='Tom'
age=20
def a():
print('第一个函数')
def b(add=1):
print('第二个函数:',add)
def c(add=1):
print('第三个函数:',add)
return add
print('静态类name:',StaticC.name)
StaticC.age=10
print('静态类age:',StaticC.age)
StaticC.a()
2、面向对象编程的核心方法:
a、封装(Encapsulation):是将现实世界中存在的某个客体的属性和行为绑定在一起,并放置在一个逻辑单元内。
b、继承(Inheritance):描述了子类属性从祖先继承这样一种方式。
issubclass(Box1,Box2):判断Box1和Box2是否存在父子关系
c、多态(Polymorphism):指相同的函数可作用于多种类型的对象上并获得不同的结果。