python学习笔记之(八)
2014-03-24 14:37
190 查看
面向对象高级编程
我们定义一个class,可对其的实例绑定属性:
也可以绑定方法(注意绑定方法的格式):
但是给一个实例绑定的方法对其他实例并不起作用:
于是可以给class绑定方法(注意格式,也需引用MethodType):
方法也可以直接定义在class中,但这种属于动态绑定,有其好处
使用_slots_
但如果想要限制class的方法该,比如只允许Student有name和age两个属性
其中使用tuple定义允许的属性名称。
注意:__solts__只对当前类起作用,对其子类无约束,子类仍可以使用tuple之外的方法。
如果子类也定义 __solts__,那么子类允许的属性名称为子类的约束加上父类的约束。
@prooerty 略过不提
多重继承Mixin
要想给动物加上Runnable, Flyable的功能,就需要定义Runnable, Flyable类,使用多重继承,同时继承两个父类
为了使继承关系明了,使用主线继承,辅助功能Runnable, Flyable变为RunableMixin与FlyableMixin。
我们定义一个class,可对其的实例绑定属性:
>>> class Student(object): pass >>> s = Student() >>> s.name = 'M' >>> print s.name M
也可以绑定方法(注意绑定方法的格式):
>>> def set_age(self, age): self.age = age >>> from types import MethodType >>> s.set_age = MethodType(set_age, s, Student) >>> s.set_age(25) >>> s.age 25
但是给一个实例绑定的方法对其他实例并不起作用:
>>> s2 = Student() >>> s2.get_age(25) Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> s2.get_age(25) AttributeError: 'Student' object has no attribute 'get_age'
于是可以给class绑定方法(注意格式,也需引用MethodType):
>>> def set_score(self, score): self.score = score >>> Student.set_score =MethodType(set_score, None, Student) >>> s.set_score(90) >>> s.score 90 >>> s2.set_score(100) >>> s2.score 100
方法也可以直接定义在class中,但这种属于动态绑定,有其好处
使用_slots_
但如果想要限制class的方法该,比如只允许Student有name和age两个属性
>>> class Student(object): __slots__ = ('name', 'age')
其中使用tuple定义允许的属性名称。
>>> s = Student() >>> s.name = 'M' >>> s.age = 25 >>> s.score = 89 Traceback (most recent call last): File "<pyshell#36>", line 1, in <module> s.score = 89 AttributeError: 'Student' object has no attribute 'score'
注意:__solts__只对当前类起作用,对其子类无约束,子类仍可以使用tuple之外的方法。
如果子类也定义 __solts__,那么子类允许的属性名称为子类的约束加上父类的约束。
@prooerty 略过不提
多重继承Mixin
>>> class Animal(object): pass >>> class Mammal(Animal): pass >>> class Bird(Animal): pass >>> class Dog(Mammal): pass >>> class Bat(Mammal): pass >>> class Parrot(Bird): pass >>> class Ostrich(Bird): pass
要想给动物加上Runnable, Flyable的功能,就需要定义Runnable, Flyable类,使用多重继承,同时继承两个父类
为了使继承关系明了,使用主线继承,辅助功能Runnable, Flyable变为RunableMixin与FlyableMixin。
>>> class RunnableMixin(object): def run(self): print('Running...') >>> class FlyableMixin(object): def flt(self): print('Flying...')
>>> class Dog(Mammal, RunnableMixin): pass >>> dog = Dog() >>> dog.run() Running...
相关文章推荐
- python nltk 学习笔记(3) processing raw text
- [置顶] Python个人学习笔记五
- 廖雪峰python学习笔记15.正则表达式入门
- Python学习之路---模块笔记
- python基础学习笔记(八)
- [python]学习笔记2-字符串内建函数1
- Python网络数据采集学习笔记1
- python网络爬虫学习笔记之实力爬虫(
- python学习笔记 turtle类使用
- Python学习笔记(五)猜数字游戏(while)
- python学习笔记4迭代
- Python学习笔记8-类的继承 、深度优先、广度优先
- Python学习笔记(二)——NumPy
- Python学习笔记14:Python执行环境
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(7)习题2.8 随机数组的三种生成算法
- Python学习笔记2——Python built-in functions学习
- OpenCV python学习笔记(六)
- Python学习笔记之疑问 4:什么是模块
- 二、PYTHON 学习笔记之multiprocessing
- Python_学习笔记