首页 > 其他分享 >面向对象之魔法方法及元类

面向对象之魔法方法及元类

时间:2022-11-08 20:22:21浏览次数:41  
标签:__ 对象 魔法 双下 模式 及元类 面向对象 方法

昨日内容回顾

  • 类的派生的应用

    在需要对原有的方法进行个性化扩展时,需要应用到方法的派生。

    在进行派生时,需要先定位到需要派生的的功能,添加个性化的功能后,使用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

相关文章

  • 面向对象之魔法方法/元类
    面向对象的魔法方法classC1:name='张三丰'age=18def__init__(self,name):#对象添加数据或改变数据时自动触发print('__init__......
  • 面向对象的魔法方法、元类定制类与对象的产生行为
    今日内容回顾目录今日内容回顾面向对象的魔法方法魔法方法笔试题元类简介创键类的两种方式元类定制类的产生行为元类定制对象的产生行为魔法方法之双下new设计模式简介面......
  • 面向对象4
    今日内容详细面向对象面对对象的魔法方法魔法方法:类中定义的双下方法都称为魔法方法不需要人为调用在特定的条件下会自动触发运行eg:__init__创建空对象之后自动触......
  • 面向对象的魔法方法与元类
    面向对象的魔法方法与元类面向对象的魔法方法魔法方法就是在类中定义的双下方法,它不需要人为调用,在特定的条件下会自动触发运行1.__init__对象添加独有数据的时候会......
  • 元类、魔法方法(魔术方法)
    目录今日内容概要今日内容详细面向对象的魔法方法魔法方法笔试题元类简介创建类的两种方式元类定制类的产生行为元类定制对象的产生行为魔法方法之双下new设计模式简介作业......
  • 面向对象魔法方法及元类
    内容概要面向对象的魔法方法基于魔法方法的笔试题元类简介创建类的两种方式元类定制类的产生行为元类定制对象的产生行为魔法方法之双下new方法设......
  • 面向对象的魔法方法、魔法方法笔试题、元类简介、创建类的两种方式、元类定制类的产生
    面向对象的魔法方法魔法方法:类中定义的双下方法都称为魔法方法 不需要人为调用在特定的条件下回自动触发运行 eg:__init__创建空对象之后自动触发给对象添加独有的数......
  • 面向对象编程(四)
    面向对象编程(四)一、面向对象的魔法方法1.魔法方法简介在类中,有一些内置好的特定的方法,方法名是“__xx__”,在进行特定的操作时会被调用,这些方法被称为魔法方法,不需......
  • 面向对象之元类、魔法方法
    今日内容概要面向对象的魔法方法基于魔法方法的笔试题元类简介创建类的两种方式元类定制类的产生行为袁磊定制对象的产生行为魔法方法之双侠new方法设计模式简......
  • 面向对象的魔法方法、元类
    目录一、面向对象的魔法方法1.魔法方法介绍(1)__init__(2)__str__(3)__call__(4)__getattr__(5)__getattribute__(6)__setattr__(7)__enter__(8)__exit__(9)__del__2.魔法方法笔试题1)补全下列......