第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())

 

定义多了实例,不同的实例在不同的内存空间里,所以互相不影响。

posted @ 2018-08-29 13:46  feifei_tian  阅读(147)  评论(0编辑  收藏  举报