第7章 更加抽象
![](http://picture-repository-of-heamon7.qiniudn.com/Python基础教程-第7章 更加抽象.png)
第7章 更加抽象
7.1 对象的魔力
对象最重要的优点就是:多态(不同类的对象使用同样地操作),封装(对外部世界隐藏对象的工作细节),继承(以普通类为基础建立专门的类对象)
不知道对象是什么类型,又要执行某些操作时,就使用到了多态。唯一能毁掉多态的就是使用函数显式检查类型,如type,isinstance,issubclass函数等。这种多态形式被称为鸭子类型。从静态类型语言转向动态类型语言的用户通常试图添加一些静态的(在运行之前的)类型检查,从而影响了鸭子类型的益处和可伸缩性,并约束了语言的动态特性。
7.2类和类型
所有的对象都属于某一个类,成为类的实例。新式类的语法是在每个模块或脚本开始的地方放置赋值语句metaclass=type,或者继承新式类比如object
类中的每个函数都应该把类实例作为第一个参数传入函数中,一般形象的命名为self,没有它的话,成员方法就没法访问他们要对其特性进行操作的对象本身了。self方法正是方法和函数的区别,方法(准确说是绑定方法)将它们的第一个参数绑定到一个普通函数上。
为了让方法变成私有的(从外部无法直接访问)定义时可以在方法前加上双下划线,外界无法直接访问,内部仍可以用self.__func()访问,实际上外部还是可以通过class._Class__func()访问
在类中的方法外定义的变量,可以供所有类的成员(实例)访问。一旦某个实例对这个变量进行修改,这个实例中的该变量就会就会私有化
将其他类名写在class语句后的圆括号内可以指定超类,子类可以重写超类中某些函数的定义
判断一个类是否为另一个类的子类,可以使用内建的函数issubclass,要知道已知类的基类们,可以使用它的特殊属性base,还可以用isinstance方法检查一个对象是否是一个类的实例,想知道一个类属于哪个类,可以使用class特性。新式类也可以使用type()函数查看实例的类
一个类可以有多个超类,先继承的类中的方法会重写后继承的类中的方法
hasattr()函数可以查看类是否含有某个属性,callable(getattr(,,)函数也可以,而且如果特性不存在可以设置默认值,更直接的方式是setattr(,,)函数