ITS·黑客

【Python】笔记18(@property、多重继承/MixI

2017-05-14  本文已影响25人  阿凯Awesome

例子中,符合逻辑的Student类中的score,将设置成绩、获取成绩两项分开,在设置成绩的时候就可以检查参数。

'raise ValueError('....'),返回值是程序报错,通常与if语句结合。


对于类的方法,装饰器一样起作用。

@property,是Python内置装饰器,负责把一个方法变成属性调用的。

内部代码第一行的@property此时就相当于把下方的getter方法变成了属性,而且本身又创建了另一个装饰器@score.setter,也是把下方的setter方法变成属性赋值,于是,在传入或调出检查的时候就可以以“s.score=60”、“s.score”来代替没有装饰器时的“s.set_score(60)”、“get_score”。据此我们在对实例属性操作的时候,可以认为该属性是通过getter和setter方法来实现的,而不是直接暴露的。

虽然装饰器@property会本身创建另一个装饰器@xxx.setter,但是不定义这个setter方法可以使这个属性成为只读属性。

最后一个age方法就是一个只读属性,返回的值可以根据前面birth的setter方法得出。

作业:

代码中出现了很多下划线,下划线的作用:1.便于调试;2.为了与装饰器不同名。代码中的assert是判断语句,错误会显示错误报告。


分类之中还有分类,这样会使得分类种数呈指数增长,数据量过大。这时,应该采用多重继承。做法是,

将Mammal、Runnable这两类分别独立定义,Mammal是否有继承关系与Runnable无关。这就使得Dog这个类实现了多重继承。通过多重继承,一个子类就同时获得多个父类的所有功能。


MixIn,指的是多重继承使得一个类混入了父类有的、额外的功能的设计。这样一来,我们不需要复杂的继承链,只要选择组合不同的类的功能,就可以快速构造出所需的子类。

例子,Python自带的TCPServer、UDPServer这两类服务,ForkingMixIn(多进程模型)、ThreadingMixIn(多线程模型),通过组合可以创造出合适的服务。

上一篇下一篇

猜你喜欢

热点阅读