Python面向对象
- 类和对象
类的定义这里不多赘述,直接看数据属性
数据属性分为实例属性和类属性:
实例属性:是在构造函数__init__定义时候以self作为前缀,实力属性属于实例所有,只能通过对象名去访问
类数据属性:在类内定义的,类属性属于类,大家都可以去访问(除私有成员除外)
总结:
一,类数据属性属于类本身,可以通过类名进行访问/修改
二,类数据属性也可以被类的所有实例访问
三,在类定义之后,可以通过类名动态添加类数据属性,新增的类属性也被类和所有实例共有
四,实例数据属性只能通过实例访问
五,在实例生成之后,可以动态添加实例数据属性,但是这里,这些实例数据属性只被该实例所有
成员方法:
三种:
1. 实例方法, 第一个参数必须是self,就是上面的图片中显示的代码,就用了实例方法
2. 类方法,定义的时候用@classmethod修饰,通过cls可以访问相关属性 用法是用类名可以点出函数
3. 静态方法:用@staticmethod修饰,用法和上面一样,这里用类名点处理属性方法
访问控制:
我们用单下划线'_'来实现模块级别私有化,但是单下划线的变量是可以访问,(我们约定俗成不能访问),不过在from moduleName import *中是不能访问加单下划线的变量
在类中的的私有化:我们用双下滑线来实现私有化,在类外是无法访问,
pis:可以通过命名重整的方法来实现访问! _Student__address 重整类名来访问
构造与析构:
构造函数属于对象,每个对象都有自己的构造函数
析构同理,我们不用去主动调用,他会自动调用,并且python由垃圾回收机制
继承:
首先我们可以用内建函数来判断一个类是不是另一个类的子类
issubclass(sub,sup)
前面我们也说过用isinstance(obj,class)来判断obj是不是一个类的实例对象
继承中的一些注意点
1. 在继承中基类的构造不会被自动调用,他需要在子类中亲自调用
2. 在调用基类方法的时候,需要加上基类的类名前缀,且加上self参数变量
3. Python找类型方法时候有先从本类中先查找,查找不到在在父类中查找
我们可以在子类中写出和父类函数名字一样的函数(即重写)