昨日内容回顾
-
类的派生的应用
在需要对原有的方法进行个性化扩展时,需要应用到方法的派生。
在进行派生时,需要先定位到需要派生的的功能,添加个性化的功能后,使用super调用原方法。
-
面向对象之封装
封装即对数据和功能进行封装,形成对象。
隐藏即对类中的名称进行隐蔽处理,形式为在该名称前加上双下划线,使对象无法直接通过点的方式调用。对名称的隐藏实质上是在该名称的前面加上单下划线及类名。
被隐藏的对象无法被直接调用,但是可以在定义时规定相应的接口对该名称对应的数据进行操作。
伪装即对函数内的方法进行装饰,使其看起来像类内的名称。需要使用property装饰器,被装饰的函数除了self之外不能有其他的参数。
-
面向对象之多态
同一类的同一方法在不同的对象中可以有不同的表现形式,这就是对象的多态性。
-
面向对象之反射、
反射为我们提供了使用字符串访问对象中名称的方式,常用的方法有:hasattr() getattr() setattr() delattr()
今日内容概要
- 面向对象之魔法方法
- 面向对象之元类
- 干涉类的生成
- 干涉对象的生成
- 魔法方法之双下new
- 设计模式简介
今日内容详细
面向对象之魔法方法
魔法方法即在进行特定操作时自动触发的方法。常见的魔法方法有:
__init__() # 在产生类的对象时自动触发
__call__() # 在使用对象加括号时自动触发
__str__() # 在执行打印操作时自动触发
__getattr__() # 在调用类中不存在的名称时自动触发
__getattribute__() # 在调用类中的名称时自动触发,优先级高于__getattr__()
__setattr__() # 在为对象中的名称进行赋值时自动触发
__enter__() # 在对象作为with上下文管理的对象开始时自动触发
__exit__() # 在对象作为with上下文管理的对象子代码运行结束后自动触发
面向对象之元类
元类即为解释器使用者生成自定义类的最原始的类,即type类。继承了type的类也可以称为元类。
python中一切皆对象,因此元类生成新类与类生成对象的过程类似,只是规模不同。元类产生的类对象默认可以加括号调用生成对象,而生成的对象想要加括号调用必须手动在生成它的类中定义双下call方法。
干涉类的形成
想要干涉类的形成需要在形成的阶段进行操作,即对双下init方法的运行进行干涉。
在pycharm中我们无法直接访问到type类的源代码,因此我们只能通过用继承type的类作为元类,然后对继承后的类的双下init方法进行派生,从而达到我们想要的目的。
指定类的元类的方法为,在定义类的阶段,类名后加括号,括号内对metaclass关键字赋值。
干涉对象的形成
对象的形成是使用类加括号的形式实现的,其本质是调用了其元类中的双下call方法。
与干涉类的形式的方法类似,使用metaclass关键字赋值改变其元类,在我们自己定义的元类中,对双下call函数进行装饰,装饰完成后,使用super调用原来的双下call方法,完成对象的生成。
魔法方法之双下new
def __new__(cls, *args, **kwargs): pass
双下new方法一般存在于元类type中,生成新的对象时,会调用双下new方法先形成一个新的空对象,然后用可变长形参接收传入的参数,最后调用类定义时的双下init函数按照规则对名称进行赋值。
设计模式简介
设计模式分为三种类型,共23种。
创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式
标签:__,对象,魔法,双下,模式,及元类,面向对象,方法 From: https://www.cnblogs.com/akazukis/p/16871044.html