面向对象深入

内置成员

获取类/对象的所属成员 类/对象.dict
res = Demo.dict # 获取当前类的所属成员
res = obj.dict # 获取当前对象的所属成员
获取类的文档信息 类/对象.doc
res = Demo.doc
res = obj.doc
获取类名称组成的字符串
res = Demo.name
获取类所在的文件名称,如果是当前文件,显示为__main__
res = Demo.module
bases 获取当前类的父类列表
res = Demo.base 获取继承的第一个父类
res = Demo.bases 获取继承的所有的父类列表
获取当前类的继承链
res = Demo.mro

方法的分类

  1. 对象方法
    特征:
    1. 在类中定义的方法,含有self参数
    2. 含有self的方法,只能使用对象进行调用
    3. 该方法会把调用的对象传递进来

  2. 类方法
    特征:
    1.在类中定义的方法,使用装饰器 @classmethod 进行了装饰
    2.方法中有cls这个行参。不需要实例化对象,直接使用类进行调用
    3.会把调用这个方法的类传递进来

  3. 绑定类方法
    特征:
    在类中定义的方法只能使用类进行调用

  4. 静态方法
    特征:在类中定义的方法,使用了 装饰器 @staticmethod 进行了装饰,可以使用对象或者类进行调用

常用函数

检测类和对象相关
issubclass(子类,父类) # 检测一个类是否为另一个类的子类
res = issubclass(D,B)

isinstance(对象,类) # 检测一个对象是否是该类或该类的子类的实例化结果
res = isinstance(d,A)
操作类和对象成员相关
hasattr(对象/类,‘成员名称’) 检测类/对象是否包含指定名称的成员
res = hasattr(d,‘name’)
getattr(对象/类,‘成员名称’) # 获取类/对象的成员的值
res = getattr(d,‘say’)
setattr(对象/类,‘成员名称’,‘成员的值’) 设置类/对象的成员的属性值
res = setattr(d,‘name’,‘ooo’)
print(d.name)
delattr(类/对象,‘成员名称’) 删除类/对象的成员属性 和 del 直接删除对象的成员是一样的结果
delattr(D,‘name’)
dir() #获取当前对象所以可以访问的成员的列表
res = dir(d)

魔术方法

  1. init 初始化方法
    触发机制:当实例化对象之后就会立即触发的方法
    作用: 为当前创建的对象完成一些初始化的操作,比如:成员属性的赋值,方法的调用,打开或创建一些资源。
  2. new 构造方法
    触发机制:实例化对象时自动触发(在__init__之前触发)
    作用: 管理控制对象创建的过程
  3. del 析构方法
    触发机制:当该类对象被销毁时,自动触发
    作用: 关闭或释放对象创建时打开或创建的一些资源
  4. call
    触发机制: 把对象当作函数直接调用时自动触发
    作用: 一般用于归纳类或对象的操作步骤,方便调用

描述符

当一个类中,包含了三个魔术方法(get,set,delete)之一,或者全部时,那么这个类就称为描述符类
作用:描述符的作用就是对一个类中的某个成员进行一个详细的管理操作(获取,赋值,删除)
描述符就是代理了一个类中的成员的操作,描述符属于类,只能定义为类的属性
get(self, instance, owner)
触发机制:在访问对象成员属性时自动触发(当该成员已经交给描述符管理时)
作用:设置当前属性获取的值
参数:1. self 描述符对象 2.被管理成员的类的对象。3.被管理成员的类
返回值:返回值作为成员属性获取的值
set(self, instance, value)
触发机制:在设置对象成员属性时自动触发(当该成员已经交给描述符管理时)
作用:对成员的赋值进行管理
参数:1. self 描述符对象 2.被管理成员的类的对象。3.要设置的值
返回值:无
delete(self, instance)
触发机制:在删除对象成员属性时自动触发(当该成员已经交给描述符管理时)
作用:对成员属性的删除进行管理
参数:1. self 描述符对象 2.被管理成员的类的对象。

设计模式

设计模式是前人为完成某个功能或需求,根据经验和总结,对实现的代码步骤和代码设计进行了总结和归纳,成为了实现某个需求的经典模式。
设计模式并不是固定的代码格式,而是一种面向对象编程的设计。
单例(单态)设计模式:
在当前脚本中,同一个类只能创建出一个对象去使用。这种情况就成为单例(单态)。
Mixin 混合设计模式:

  • Mixin 必须是表示一种功能,而不是一个对象。
  • Mixin 的功能必须单一,如果有多个功能,那就多定义Mixin类
  • python 中的Mixin是通过多继承实现的
  • Mixin 这个类通常不单独使用,而是混合到其它类中,去增加功能的
  • Mixin 类不依赖子类的实现,即便子类没有继承这个Mixin,子类也能正常运行,可能就是缺少了一些功能。。

装饰器

在不改变原有函数代码,且保持原函数调用方法不变的情况下,给原函数增加新的功能(或者给类增加属性和方法)
核心思想:用一个函数(或者类)去装饰一个旧函数(或者类),造出一个新函数(或者新类)

应用场景:引入日志,函数执行时间的统计,执行函数前的准备工作,执行函数后的处理工作,权限校验,缓存等

语法规则:在原有的函数上加上 @符,装饰器会把下面的函数当作参数传递到装饰器中,@符又被成为 语法糖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值