天天看点

day17学习笔记(面向对象)面向对象

面向对象

类属性

类中的属性:对象属性、类属性(类的字段)

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 错误类型