第9次预习课-0822
面向对象
类:class
哪种语言不用类: C 汇编 Fortran
目前流行的语言:python或java
类的好处:减少重复代码的编写,可以更好的进行程序的维护、扩展和升级
Class P:pass
P:类,定义个名字为P的类
在内存中,会有一个存储P类所有的内容。
p = P() #实例化,从类P,生成了一个具体的对象p
P是一个模板,实例是通过这个模板,添加了不同的初始化参数的具体产品,可以有多个,且每个具体产品可以有不同参数设定不同的造型。
class Person(object):
def __init__(self,name,sex,height,weight,bachelor):
self.name = name
self.sex = sex
self.height = height
self.weight = weight
self.bachelor = True
def print_name(self):
print(self.name)
wulaoshi = Person("wulaoshi","M","180","200",True)
lilaoshi = Person("lilaoshi","F","160","100",False)
print(wulaoshi.sex)
print(lilaoshi.sex)
wulaoshi.weight = str(int(wulaoshi.weight)+1)
print(wulaoshi.weight)
wulaoshi.print_name()
对于封装:
不用关心程序内部实现,只需要调用函数或者类方法即可
函数和类都可以实现封装:
函数:只有操作某些数据的过程和算法,但是自己不保存数据。
类实例:不但有操作某些数据的过程和算法,且保存相关的数据。
类:
管理一组数据(可以是0个、1个、多个),以及提供操作这组数据的相关方法,数据和方法组成了类。
类定义的所有内容,在内存中仅有一份 (类变量和类方法)
类实例(多个),每个类实例在内存中都有自己的空间。
类的方法里面为啥要有一个self呢?
wulaoshi.print_name()---> 在内存中找到类定义所在的内存位置,self->吴老师所在的内存地址,使用wulaoshi实例中的name值进行打印。
举例一个汽车
class CAR(object):
CAR_DISTANCE_NUM = 0 #类变量
def __init__(self,name,length,height,color,gas_num,gas_consume_num=20,distance=0):
self.name = name
self.length = length
self.height = height
self.color = color
self.gas_num = gas_num
self.gas_consume_num = gas_consume_num
self.distance = distance
def run(self):
if self.gas_num >= self.gas_consume_num:
self.distance+=100
self.gas_num-=20
CAR.CAR_DISTANCE_NUM+=100
else:
print("没油了,请速加!")
def add_gas(self,n):
self.gas_num+=n
def check_distance(self):
return self.distance
def check_gas(self):
return self.gas_num
@classmethod
def get_total_distance(cls):
return CAR.CAR_DISTANCE_NUM #不能使用 self 的实例变量 return cls.CAR_DISTANCE_NUM 也可以
c = CAR("吴老师的豪车","500cm","200cm","red",100)
'''
for i in range(5):
c.run()
print(c.check_gas())
print(c.check_distance())
c.add_gas(100)
print(c.check_gas())
'''
l = CAR("李老师的豪车","800cm","300cm","blue",200)
#c和l都在不同的内存空间里面,所以互相都不影响,都没关系
c.run()
print(c.check_gas())
l.run()
print(l.check_gas())
print(CAR.get_total_distance())
l.run()
print(CAR.get_total_distance())
定义多了实例,不同的实例在不同的内存空间里,所以互相不影响。