Day12大呲花参观姚明汽车厂 听闻姚明在美国办了个车厂,上海烟花厂的一箱炮竹不淡定了。他们决定要去向姚老板祝贺。所以,他们决定把自己封装在一个集装箱里走海运去美国。 到达美国后,姚明热情的接待了他们。有个叉车跑过来告诉姚老板,有个客户觉得车座太小,想换一个大的,结果换的那个太大,就放在车顶上去了,现在跑在街上巨丑无比。姚老板一听这哪行啊。我们送给客户的构造机也不能瞎用啊。这得设置一些条件,不能让他们随意设置东西(在设计完类,外界创建对象通过.的形式访问(设置)属性,可能会出现跟现实情况不符的混乱数据,那么我们就将属性的设置权没收(外界不能直接通过.调用属性)) 。大呲花说,这好办啊,在大铁架下方放一个大袋鼠,把客户的要求放进袋鼠的袋子里进行判断,让那些符合条件的配置要求通过,其他的不让通过。
在类的内部提供外界额外的访问方式(定义setter和getter方法),并且在需要的时候,可以在函数的内部加入数据合法性的校验;对于setter函数,命名:set属性名(首字母大写)
设置值(__age):
def setAge(self,age):
self.__age = age
袋鼠还可以把纸条拿出来进行阅读。
对于getter函数,命名:get属性名(首字母大写)
获取值(__age):
def getAge(self):
return self.__age
姚明一听,对此表示赞同! 这时,一辆大象车呼啸而过,大呲花给吓坏了。姚明告诉他,这辆车就是从他的厂生产出来的车改造的。论辈分,他得叫我的车叫爸爸(两部分组成,一部分我们称为父类(基类、超类、superclass),另一部分我们称为子类(派生类、subclass),子类可以使用父类中的成员(使用权)) 。有的车只经过一次改造,成为单继承车。
class Teacher(Person):
def __init__(self,name,age,salary):
print('我是teacher类的构造函数。。。')
self.salary = salary
#调用父类构造函数 目的:父类的属性由父类自己赋值
#在子类构造函数中显示的调用其父类构造
# super(Teacher,self).__init__(name,age)
# super().__init__(name,age)
Person.__init__(self,name,age)
这样改造后的车既可以有父类的样式,也有自己的样式,既有父类的功能,也有自己的功能。 还有一种车经过多次改造,我们管这种车叫多重继承车,它是单继承车的延伸。还有一种车是吸取了多种风格改造出来的,我们把它叫多继承车。
from father import Father
from mother import Mother
'''
定义Child类同时继承Father和Mother类
'''
class Child(Father,Mother):
def __init__(self,money,faceValue,work):
self.work = work
Father.__init__(self,money)
Mother.__init__(self,faceValue)
改造的时候,有的客户对我们的车某些功能不太满意,想改进一下,这个我们也是支持的。但是我们的名字不能改。
函数重写(override)前提:必须有继承性
原因:
父类中的功能(函数),子类需要用,但是父类中函数的函数体内容和我现在要执行的逻辑还不相符
那么可以将函数名保留(功能还是此功能,但是将函数体重构;
注意: 子类重写父类的函数,除了函数体以外的部分,直接复制父类的即可)
大呲花问姚明这些改造车都是在哪加工的呢?姚明告诉大呲花,我们的厂里生产时给车设置一些基本属性,完了呢给它点功能。
类函数:
格式:
@classmethod
def 函数名(cls,...)cls可以理解为当前类的类名
它到客户手中,我们还给客户配置了一个铁架子,用来对车进行改造。
(对象函数:格式: def 函数名(self,...)
self可以理解为当前对象或者正在被创建的对象)
两者的关系是以客户改造为主。
类可以调用类(属性、函数),不能调用对象(属性、函数),对象可以调用类(属性、函数),也能调用对象(属性、函数)。我们可以用别的方式解决,方式如下:
先进行对象实例化 --> d = cls(100)
d就可以随意的去访问对象属性和对象函数了)
大呲花开了辆车准备兜风,开完后,这辆车就被直接放到一个大的类似于水泥搅拌机的机器里,从下面出来就变成了一箱纸。这个机器叫pickle,它有两个口,上面有个进口叫dump(dump(obj, fr):将obj对象序列化到文件中(取决于fr中的path)) ,它能把车变成文字记录在纸上。下面的小口叫load(load(fw):将fw(path中的数据)加载到程序,以对象返回) 它能把一箱纸重新变成车。
#实例化Person对象
# p = Person('貂蝉',18,'女',162.0,84,'靓丽')
#
# fw = open(r'person.txt','wb')
#对象序列化操作:将程序中的对象p序列化到person.txt文件中保存起来
# pickle.dump(p,fw)
#
# fw.close()
# fr = open(r'person.txt','rb')
#对象反序列化操作:将person.txt中的二进制数据反序列化到程序中,还原成为一个Person对象
# p1 = pickle.load(fr)
# print(p1,type(p1))
#
# fr.close())
|