• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:Python进阶丨如何创建你的第一个Python元类

python 搞代码 3年前 (2022-02-20) 15次浏览 已收录 0个评论
文章目录[隐藏]

摘要:通过本文,将深刻探讨Python元类,其属性,如何以及何时在Python中应用元类。

Python元类设置类的行为和规定。元类有助于批改类的实例,并且相当简单,是Python编程的高级性能之一。通过本文,将深刻探讨Python元类,其属性,如何以及何时在Python中应用元类。本文介绍以下概念:

  • 什么是Python元类?
  • Python中的类和对象
  • Python中的动静类
  • Python元类如何工作?
  1. 类型类
  2. Python中的自定义元类
  • 装璜器vs元类

什么是Python元类?

Python元类是与Python的面向对象编程概念相干的高级性能之一。它确定类的行为,并进一步帮忙其批改。

用Python创立的每个类都有一个根底的Metaclass。因而,在创立类时,您将间接应用元类。它隐式产生,您无需指定任何内容。

与元编程相关联的元类决定了程序对其本身进行操作的能力。 学习元类可能看起来很简单,然而让咱们先从一些类和对象的概念动手,以便于了解。

Python中的类和对象

类是一个蓝图,是具备对象的逻辑实体。 一个简略的类在申明时没有调配任何内存,它是在创立一个类的实例时产生的。

通过创立的对象,能够拜访该类。该类仅用作模板。对象的属性实质上意味着咱们能够在运行时与它进行交互,传递诸如变量之类的参数,进行存储,批改,也能够与它进行交互。

能够应用__class__属性查看对象的类。让咱们看一个简略的例子:

Output: <class ‘__main__.Demo’>

Python大量解决类和对象的概念,并容许轻松,顺利地进行利用程序开发。然而,什么使Python与Java和C这样的语言不同呢?Python中的所有内容都能够定义为具备属性和办法的对象。 主题演讲是Python中的类不过是更大类的另一个对象。

类为对象定义规定。同样,元类负责为类调配行为。咱们曾经晓得,类是对象,就像每个对象都有一个实例一样,类是元类的实例。

然而也有像Ruby和Objective-C这样的语言也反对元类。那么,是什么使Python Metaclass更好,为什么还要学习它呢?答案是Python中的动静类。让咱们认真看看。

Python中的动静类

Python是一种动静编程语言,并容许在运行时创立类。与C ++等其余语言不同,后者仅容许在编译时创立类。在灵活性方面,Python优于其余动态类型的语言。

动静和动态类型语言之间的差别并不大, 然而在Python中,它因为提供元编程而变得更加有用。

然而,如果我告诉您还有另一个要害性能将Python与其余编程语言辨别开呢?

诸如Java或C ++之类的语言具备float,char,int等数据类型,而Python将每个变量视为对象。每个对象都属于一个类,例如int类或str类。您能够应用称为type()的内置函数来简略地查看任何变量的类

Output:

Type associated is: <class ‘int’>

Type associated is: <class ‘str’>

当初,您理解了Python中的所有内容都有与之关联的类型。在下一个主题中,咱们将尝试理解元类实际上是如何工作的。

Python元类如何工作?

每当创立一个类时,都会调用默认的Metaclass类型。 元类蕴含名称,基类集以及与该类关联的属性等信息。因而,在实例化一个类时,将调用带有这些参数的类。能够通过两种办法创立元类:

  1. 类型类
  2. 自定义元类

让咱们持续输出class以及如何创立class。

类型类

Python有一个称为type的内置元类。与Java或C不同,那里有次要的数据类型。Python中的每个变量或对象都有一个与之关联的类。Python应用幕后的Type类创立所有类。在上一个主题中,咱们看到了如何应用type()查看对象的类。让咱们举一个例子,阐明如何通过创立一个简略的类来定义新类型。

Output: <class ‘__main__.Edureka’>

Output: <class ‘type’>

在下面的代码中,咱们有一个名为Edureka的类,以及一个关联的对象。咱们通过简略地在该类型之后创立一个名为本身的类,创立了一个名为Edureka的新类型。在第二个代码中,当咱们查看Edureka类的类型时,其后果为“类型”。

因而,除非另有定义,否则元类应用类型类来创立所有其余类。咱们能够通过两种办法拜访Type类:

当咱们通过类型类传递参数时,它应用以下语法。

  • 名称是一个字符串,并带有类名
  • 该根底是一个元组,可帮忙创立子类
  • 属性是字典,并调配键值对

因为Python中的类的行为与对象类似,因而能够用雷同的形式更改其行为。咱们能够在类内增加或删除办法,相似于对对象的解决形式。

当初您曾经晓得Metaclass在Python中创立了所有其余类,并应用类型class定义了它们的行为。然而,您肯定想晓得,咱们还有其余办法能够创立元类吗?因而,让咱们看看如何创立一个自定义的元类。

Python中的自定义元类

当初咱们晓得并了解类型类如何工作。当初该学习如何创立自定义元类了。咱们能够通过执行动作或代码注入来批改类的工作。为此,咱们能够在创立类定义时将Metaclass作为关键字传递。另外,咱们能够通过简略地继承通过此Metaclass关键字实例化的类来实现此目标。

在创立新类时,Python查找metaclass 关键字。以防万一,如果不存在。它遵循类型类层次结构。

Python在命名空间中执行所有字典后,将调用类型对象,后者创立类的对象。咱们能够应用两种办法来创立自定义元类。

让我具体解释这两种办法:

  1. new (): 当用户要在类创立之前定义元组字典时应用。它返回一个类的实例,并且很容易笼罩/治理对象流。
  2. init ():在创建对象并对其进行初始化之后调用它。

Python中的__call__是什么?

在正式的Python文档中,call办法可用于定义自定义元类。同样,当调用类定义自定义行为时,咱们能够笼罩__prepare__之类的其余办法。

就像类如何像创建对象的模板一样,元类也像类创立模板一样。因而,元类也称为类工厂。

请参见下一个示例:

Output: 200

元类容许自定义类。还有多种其余无效且简略得多的办法能够通过这些办法实现雷同的输入。这样的例子之一就是应用装璜器。

装璜器vs元类

Decorator是Python的一项风行性能,它容许您向代码中增加更多功能。装璜器是可调用的对象,可帮忙批改现有的类甚至函数。在编译期间,局部代码将调用并批改另一部分。此过程也称为元编程。

Output: 200

Python中的Decorator是一个十分有用且功能强大的工具,可帮忙您更改函数的行为,而无需理论更改任何代码。 当您要在调试时批改程序的一部分而不是重写函数或更改整个程序时,这十分不便。取而代之的是,您只需编写一个单行装璜器,其余的就由它来解决。

本文分享自华为云社区《如何创立您的第一个Python元类?》,原文作者:Yuchuan。  

点击关注,第一工夫理解华为云陈腐技术~


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:Python进阶丨如何创建你的第一个Python元类

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址