您的位置:首页 > 编程语言

面向对象和高级编程 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的功能,而不是设计多层的复杂的继承关系

*
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  编程