标签:测试
面向对象高级编程
1)给类或者实例绑定一个方法
from types import MethodType
给实例绑定:
s.set_age=MethodType(set_age,s,Student) set_age:函数 s 实例 Student:类名
给类绑定
Student.set_age=MethodType(set_age,None,Student)
2)使用__slots__
限制class的属性,规定哪几个属性可以在创建实例的时候添加属性。
3)使用@property
装饰器,既能检查参数,又可以用类似属性的方法来调用访问类的变量
实现方式:
@property 把一个getter方法变成属性
@xxx.setter 由@property创建出来的另外一个装饰器。负责把setter变成属性用来赋值
xxx就是函数名了。保持一致
eg:
class Student(object): @property def score(self): return self._score @score.setter def score(self, value): if not isinstance(value, int): raise ValueError(‘score must be an integer!‘) if value < 0 or value > 100: raise ValueError(‘score must between 0 ~ 100!‘) self._score = value
4)多重继承
class bat(mammal,flyable)
Mixin 迷信
多重继承有几个缺点。
结构复杂化,多个父类又有父类,就很复杂
顺序模糊,先继承谁,不清楚
功能冲突,相同方法名,该使用谁的方法
继承用单一继承
两个以上的多重继承必须用迷信继承
不能单独生成实例;
不能继承普通类。
关于迷信继承:
http://snoopyxdy.blog.163.com/blog/static/6011744020146311737593/
5)定制类
__slots__()
__len__()
__str__()
__iter__()
__getitem__()
__getattr__()
__call__()
6)type() and metaclass
type讲解了由类到创建实例的过程
metaclass主要用于操作数据库
ORM框架
本文出自 “ehealth” 博客,谢绝转载!
标签:测试
原文地址:http://ehealth.blog.51cto.com/10942284/1726847