面向对象
类属性
类中的属性:对象属性、类属性(类的字段)
1)类属性
定义在类中的变量
类属性的值不会因为对象的不同而不同
2)对象属性
通过 self.属性名 = 值 定义在 init 函数中的属性
对象属性的值会因为对象不同而不同
对象属性的增删改查
1.查(获取属性的值)
对象.属性 - 获取对象指定属性的值
getattr(对象,属性名) - 获取对象指定属性的值
getattr(对象,属性名,默认值) - 获取对象指定属性的值,若不存在,返回默认值
2.改、增
对象.属性 = 值 - 属性存在修改,不存在添加
setattr(对象,属性名,值) - 属性存在修改,不存在添加
3.删
del 对象.属性 - 删除对象属性
delattr(对象,属性名) - 删除对象属性
内置属性
python在定义类的时候系统自动添加的属性(从基类中继承的属性)就是内置属性
类属性
类.module - 获取定义类模块的模块名
对象.class - 获取对象对应的类
类.name - 获取类的名字
类.dict - 将类转换为字典(类属性名作为key,类属性值作为值)
对象.dict - 将对象转换为字典(对象属性名作为key,对象属性值作为值)
类.doc - 获取类的说明文档
类.base - 获取当前类的父类
类.bases - 获取当前类的所有父类
slots = (对象属性1,对象属性2,…) - 约束当前类对象属性(对象.__dict__无效)
私有化
访问权限(针对属性和方法)
公开的:在类的内部和外部都可以使用,也能被继承
保护的:在类的内部可以使用,外部不能使用,可以被继承
私有的:只能在类的内部使用,不能被继承
python中所有的属性和方法都是公开的,私有化其实是假的私有化
属性和方法前加 __
getter和setter
1.getter和setter的作用
getter:获取某个属性前需要添加其他操作,给属性添加getter
setter:给属性赋值前需要添加其他操作,给属性添加setter
2.添加getter和setter
1)getter
第一步:需要添加getter的属性名前加_
第二步:定义getter对应的函数(1.需要@property装饰器 2.函数名就是不带_的属性名 3.函数返回值)
第三部:不带 _ 获取属性值
2)setter(需要与getter同时存在)
第一步:需要添加setter的属性名前加_
第二步:定义setter对应的函数(1.需要@getter函数名.setter 装饰器 2.函数名就是不带_的属性名 3.需要一个参数(尝试赋值),不需要返回值)
第三部:raise 错误类型