总结:通过这篇文章,深入讨论了Python元类,它们的属性,如何以及何时在Python中使用元类。Python元类设置类的行为和规则。元类有助于修改类的实例,非常复杂,是Python编程的高级功能之一。通过本文,我们将深入讨论Python元类、它们的属性、如何以及何时在Python中使用元类。本文介绍了以下概念:什么是Python元类?Python中的类和对象Python中的动态类Python元类如何工作?类型类Python中的自定义元类装饰器与元类什么是Python元类?Python元类是与Python的面向对象编程概念相关的高级功能之一。它决定了类的行为并进一步方便了它的修改。在Python中创建的每个类都有一个底层元类。因此,在创建类时,会间接使用元类。它隐含地发生,你不需要指定任何东西。与元编程相关的元类决定了程序对自身进行操作的能力。学习元类可能看起来很复杂,但为了便于理解,让我们从一些类和对象概念开始。Python中的类和对象类是一个蓝图,一个带有对象的逻辑实体。一个简单的类在声明时不会分配任何内存,它发生在创建类的实例时。通过创建的对象,可以访问类。此类仅用作模板。对象的属性本质上意味着我们可以在运行时与它交互,传递变量之类的参数,存储它,修改它,还可以与它交互。可以使用__class__属性检查对象的类。让我们看一个简单的示例:输出:Python大量处理类和对象的概念,并允许轻松顺利地开发应用程序。但是是什么让Python与Java和C等语言不同呢?Python中的一切都可以定义为具有属性和方法的对象。主题是Python中的类只是更大类的另一个对象。类定义对象的规则。同样,元类负责将行为分配给类。我们已经知道类是对象,就像每个对象都有一个实例一样,类是元类的实例。但也有像Ruby和Objective-C这样的语言也支持元类。那么,是什么让Python元类更好,为什么要学习它呢?答案是Python中的动态类。让我们仔细看看。Python中的动态类Python是一种动态编程语言,允许在运行时创建类。不像其他语言像C++,只允许在编译时创建类。在灵活性方面,Python优于其他静态类型语言。动态类型语言和静态类型语言之间的区别并没有那么大,但是在Python中它通过提供元编程变得更有用。但是,如果我告诉您还有另一个关键特性将Python与其他编程语言区分开来呢?Java或C++等语言具有float、char、int等数据类型,而Python将每个变量都视为一个对象。每个对象都属于一个类,例如int类或str类。您可以使用名为type()的内置函数简单地检查任何变量的类。输出:Typeassociatedis:Typeassociatedis:现在你明白了Python中的一切都有一个与之关联的类型。在下一个主题中,我们将尝试了解元类的实际工作原理。Python元类如何工作?每当创建一个类时,都会调用默认的元类类型。元类包含名称、基类集以及与该类关联的属性等信息。所以在实例化一个类的时候,会调用带有这些参数的类。可以通过两种方式创建元类:类型类自定义元类让我们继续讨论类型类以及如何创建它们。类型类Python有一个称为类型的内置元类。与Java或C不同,那里有主要的数据类型。Python中的每个变量或对象都有一个与之关联的类。Python在幕后使用Type类创建所有类。在上一个主题中,我们了解了如何使用type()检查对象的类。让我们举一个例子,说明如何通过创建一个简单的类来定义一个新的类型。输出:输出:在上面的代码中,我们有一个名为Edureka的类和一个关联的对象。我们创建了一个名为Edureka的新类型,方法是简单地在该类型之后创建一个名为自身的类。在第二段代码中,当我们检查Edureka类的类型时,它的结果是“type”。因此,除非另有定义,否则元类使用类型类来创建所有其他类。我们可以通过两种方式访问??Type类:当我们通过Type类传递参数时,它使用以下语法。名称是带有类名的字符串基类是帮助创建子类的元组属性是字典,并分配有键值对因为Python中的类表现得像对象,所以它们可以按照与其行为相同的方式进行更改。我们可以在类中添加或删除方法,类似于我们处理对象的方式。现在你知道元类在Python中创建所有其他类并使用类型类定义它们的行为。但是,您一定想知道,有没有其他方法可以创建元类?那么让我们看看如何创建自定义元类。Python中的自定义元类现在我们知道并理解了类型类是如何工作的。现在是学习如何创建自定义元类的时候了。我们可以通过执行操作或代码注入来修改类的工作。为此,我们可以在创建类定义时将元类作为关键字传递。或者,我们可以通过简单地继承通过此Metaclass关键字实例化的类来实现此目的。创建新类时,Python会查找元类关键字。以防万一,如果不存在。它遵循类型类层次结构。在Python执行完命名空间中的所有字典后,它调用typeobject,它创建一个类的对象。我们可以使用两种方法来创建自定义元类。让我详细解释这两个方法:new():当用户想在创建类之前定义元组字典时使用。它返回一个类的实例,并且很容易覆盖/管理对象流。init():在创建并初始化对象后调用。Python中的__call__是什么?从官方的Python文档中,可以使用call方法来定义自定义元类。同样,当调用类定义自定义行为时,我们可以覆盖其他方法,如__prepare__。就像类就像创建对象的模板一样,元类就像创建类的模板。因此,元类也被称为类工厂。请参见下一个示例:输出:200个元类允许自定义类。通过这些方法,还有各种其他有效且简单得多的方法可以实现相同的输出。一个这样的例子是装饰器的使用。装饰器与元类装饰器是Python的一个流行特性,它允许您向代码添加更多功能。装饰器是有助于修改现有类甚至函数的可调用对象。在编译过程中,一部分代码会调用和修改另一部分。此过程也称为元编程。输出:200Python中的Decorator是一个非常有用且功能强大的工具,可帮助您更改函数的行为而无需实际更改任何代码。当您想在调试时修改程序的一部分而不是重写函数或更改整个程序时,这很方便。相反,您只需编写一个单行装饰器,它会处理其余部分。本文分享自华为云社区《如何创建您的第一个Python元类?》,原作者:雨川。点击关注,第一时间了解华为云的新鲜技术~