面向对象的三大特点:数据封装、继承和多态
一、类和实例
类是抽象的模板(如student类),实例是根据类创建的一个个具体的“对象”,每个对象拥有相同的方法,各自的数据可能不同。
二、访问限制
实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问
变量名类似__xxx__的,也就是以双下划线开头,并且以双下划线结尾的,是特殊变量,特殊变量是可以直接访问的,不是private变量
三、继承和多态
定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Base class、Super class),子类获得了父类的全部功能
当我们定义一个class的时候,我们实际上就定义了一种数据类型,判断一个变量是否是某个类型可以用isinstance()判断
继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写。
四、获取对象信息
1、获得对象的类型:使用 type()函数,若要判断一个对象是否是函数,使用types模块中定义的常量
2、isinstance():判断一个对象是否是该类型本身,或者位于该类型的父继承链上
能用type()判断的基本类型也可以用isinstance()判断
判断一个变量是否是某些类型中的一种
3、dir():获得一个对象的所有属性和方法,返回一个包含字符串的list
五、实例属性和类属性
给实例绑定属性的方法是 通过实例变量,或者通过self变量
给类绑定属性 直接在class中定义属性,定义了一个类属性后,这个属性虽然归类所有,但类的所有实例都可以访问到
实例属性和类属性不要使用相同的名字,因为相同名称的实例属性将屏蔽掉类属性,但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性