面向对象
1. 私有变量:以__开头的变量(私有变量只所以不能从外部直接访问是因为python解释器对外把私有变量 __xxx 改成了 _类名__xxx,所以在类外仍然可以通过 类名__xxx 这个名字访问这个变量)
2. 特殊变量:__xxx__,如 __name__ ,特殊变量不是私有变量在类外可以直接访问。
3. isinstance():用来判断实例(变量)是否是某个类型
isinstance(a, list)
isinstance(b, Animal)
在继承关系中,如果一个实例的数据类型是某个子类,那它的数据类型也可以被看做是父类。但是,反过来就不行
4. 多态:我们通过继承可以让同一名称的函数在不同类中具有不同的功能。
通过继承我们可以扩张类的功能而不用关注原来类的实现细节,符合对扩展开放对修改封闭的原则。
5.dir():返回一个对象所有的属性和方法
6. 实例属性和类属性
由于Python是动态语言,根据类创建的实例可以任意绑定属性。
class Student(object): def __init__(self, name): self.name = name s = Student('Bob') s.score = 90 #添加实例属性
class Student(object):
name = 'Student' #给类添加属性
实例属性属于各个实例所有,互不干扰;
类属性属于类所有,所有实例共享一个属性;
不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误。
7. 给实例绑定方法和给类绑定方法
class Student(object): pass s = Student() def set_age(self, age): self.age = age from types import MethodType s.set_age = MethodType(set_age, s) #给实例绑定一个方法 Student.set_age = set_age #给类绑定方法
8. __slots__:限制实例能添加的属性
class Student(object): __slots__ = ('name', 'age') # 只允许添加name和age属性
__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
9. 多重继承:通过多重继承,一个子类就可以同时获得多个父类的所有功能。
class Runnable(object): def run(self): print('Running...') class Flyable(object): def fly(self): print('Flying...') class Dog(Runnable, Flyable): pass dog = Dog() dog.run() dog.fly()
10. @property:把一个方法当成属性调用
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 s = Student() s.score = 60 print(s.score) s.score = 9999
还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性:
class Student(object): @property def birth(self): return self._birth @birth.setter def birth(self, value): self._birth = value @property def age(self): return 2015 - self._birth
面的birth是可读写属性,而age就是一个只读属性,因为age可以根据birth和当前时间计算出来。

浙公网安备 33010602011771号