面向对象和高级编程 20151212
2015-12-12 16:44
393 查看
使用__slots__
绑定方法给一个实例绑定的方法,其他的实例无法调用
可以直接给一个雷绑定方法,这样创建的其他实例也可以直接调用
>>> def set_score(self, score): ... self.score = score ... >>> Student.set_score = MethodType(set_score, Student)
使用slots
限制实例的属性
为了达到限制的目的,python允许在定义class 的时候,定义一个特殊的slots变量,来限制class实例能添加的属性
class Student(object): __slots__ = ('name', 'age') # 用tuple定义允许绑定的属性名称
slots 定义的属性仅对当前类实例起作用,对集成的子类是不起作用的,除非在子类中也定义slots, 这样,子类实例允许定义的属性就是自身的slots加上父类的slots
使用@property
在绑定属性时,如果我们直接把属性暴露出去,虽然写起来简单,但是没办法检查参数,导致在外部可以直接对属性进行更改可以使用
get set来限制属性的访问
@property python内置装饰器
class Student(object): @proprtty def score(self): return self._score @score.setter def score(self, value): if not instance(value, int): raise ValueError("score must be an integer") if value <0 or value >100: raise ValueError("score must be between 0 and 100") self._score = value
@property 方法的实现比较复杂
把一个getter方法变成属性,只需要加上@property就可以。此时,@property本身又创建了另一个装饰器@score.setter , 复杂把一个setter方法编程属性赋值
多重继承
通过继承,子类可以扩展父类的功能class Bat(Mammal, Flyable): pass
mixln
minln的目的就是给一个类增加功能,这样,在设计类的时候,我们优先考虑通过多重继承在组合多个mixln的功能,而不是设计多层的复杂的继承关系
*