Python中的__init_subclass__2025年3月5日 | 阅读7分钟 理解 Python 中的类类被定义为实例变量的存储,类是用于指定对象类型的。类用于创建尽可能多的对象实例。对象是具有某些属性(也称为数据成员)和行为(也称为成员函数)的已识别实体。具有相同特征和同一类的行为的一组对象。类是用户定义的原型,通过类来创建对象。要创建新对象,请定义一个新类,该类能够创建类型的实例,每个类都关联有处理其状态的属性。考虑这个例子:你需要管理很多狗,每只狗的品种和年龄都可能不同。因此,在使用列表记录这些信息时,第一个元素可以是品种,第二个可以是年龄,依此类推;但是当处理 100 只不同的狗时,很难确定哪个元素与哪个属性相关联。然而,你也可以包含程序能够识别的每只狗的其他属性。这种方法相当混乱,而这正是类有用武之地的地方,即使只是为了组织目标。 创建类的语法 要定义类,需要使用 class 关键字 定义对象的语法 类可以被定义为一种用户创建的数据结构,它有自己的数据以及操作这些数据的函数。这些可以通过创建类的实例来访问和利用。 与 Python 类相关的要点
在 Python 中创建类代码 使用 class 关键字定义类,类名是 Car。 Python 类的对象对象是类的实例,类用作蓝图。 对象包含
声明类的对象当从类创建实例对象时,在这种情况下,被实例化的类称为已实例化。类的所有对象都具有相似的特征,类的每个对象行为相似,但这些特征的值在不同的实例中可能不相同。类的实例属于特定类,一个类可以包含多个实例。 Python 类和对象的示例要在像 Python 这样的面向对象编程语言中创建一个对象,首先要创建一个类,然后创建一个对象。这个过程被称为对象实例化。 代码 输出 vehicle I'm a vehicle I'm a car 说明 在名为 Car 的类中,我们创建了一个名为 'sports_car' 的对象,它实际上是一辆车。正如我们所见,这个类有两个类属性,表明 sports_car 是一种交通工具,更具体地说,是一辆汽车。该类有两个属性:type 1 和 type 2。名为 display_info() 的方法被定义为显示 "I'm a {type1}" 和 "I'm a {type2}"。创建了 Car 类的对象,并显示了创建对象的 type1 字段。最后但同样重要的是,最后一个方法是 display_info() 方法。 Self 参数通过语法 object.method(param1, param2) 在对象上调用方法,该语法在内部转换为 class.method(object, param1, param2)。 代码 输出 Hello, my name is Alice, and I work at TechCorp. 在上面的代码中,创建了一个名为 python 的类,其构造函数是 name 和 company,show 方法显示一个人的姓名和公司。创建了 Python 类的对象,并调用 show 方法打印信息。 Python 3 中包含了 __init_subclass__ 方法。它是一个特殊方法,允许在实例化子类时进行扩展。在引入新子类时,它作为一个钩子在某个阶段触发,允许程序员调整子类的行为。因此,可以维护包含大量类的大型代码库。 让我们看一个 __init_subclass__ 的例子。为了清楚地理解 __init_subclass__,请考虑 Animal 作为基类,它有许多子类,如 Cat、Dog 和 Fish。因此,我们可以得出结论,每当创建一个新的 Car 子类时,就会关联一个特定的属性,即 model。创建新的 __init_subclass__ 所遵循的步骤。
代码 输出 ERROR! Traceback (most recent call last): File "<main.py>", line 13, in <module> File "<main.py>", line 5, in __init_subclass__ TypeError: Truck must have a model attribute 说明 在上面的代码中,基类是 Vehicle,子类是 Sedan、SUV 和 Truck。Truck 类不包含 model 属性,这会引发 TypeError。 子类的高级用例注册子类当需要创建子类注册表时,__init_subclass__ 特别有用。这个子类注册表有助于在不同程序之间进行对象的序列化和反序列化。假设以下示例。
代码 输出 {'ModuleA': <class '__main__.ModuleA'>, 'ModuleB': <class '__main__.ModuleB'>} 说明 在上面的代码中,创建了一个插件类,并在类中创建了一个私有变量来注册所有子类,这个注册表有助于对象的序列化和反序列化。 强制执行类属性__init_subclass__ 方法用于使某些属性在子类中成为强制性的,换句话说,是为了确保子类包含某些属性。此功能有助于组织代码,同时对代码组织施加一些符合某些设计模式的约束。让我们看一个例子
代码 输出 ERROR! Traceback (most recent call last): File "<main.py>", line 14, in <module> File "<main.py>", line 8, in __init_subclass__ AttributeError: Scooter must have a 'number_of_wheels' attribute 说明 对于对编码所做的修改,Transport 类已被声明为具有强制参数 fuel_type 和 number_of_wheels。创建了两个子类 Sedan 和 Scooter。如果子类中缺少任何必需的属性,则会引发 AttributeError。例如,在 Scooter 类中,没有 number_of_wheels 属性;因此,Transport 类会引发一个异常。 结论__init_subclass__ 是 Python 方法,它是一个强大的功能,允许程序员自定义子类的创建。 |
? 可疑代码将保留在 try 块中,并在 except 块中处理,以便生成异常的堆栈跟踪。为了处理创建的异常,我们将在此处输出堆栈跟踪。理解问题...
阅读 4 分钟
了解社交媒体自动化 自动化是指使用工具脚本来管理重复性任务,例如发布内容、与粉丝互动、管理账户。这是在没有人工干预的情况下完成的。对于营销人员、影响者和企业来说,这可以提供以下能力:一致性:可以保持规律...
阅读 6 分钟
简介 在 Python 中可以捕获 IOError 异常,以处理与输入和输出操作(例如文件处理)相关的故障。可以使用 try-except 块来捕获 IOError。你将可能导致 IOError 的代码放在 try 块中。在...
阅读 4 分钟
?Python 中的星号表达式 (*) 是一个用于解包可迭代对象的通用工具,允许从列表、元组和其他可迭代类型中高效地提取和分配值到多个变量中。在处理不同长度的序列时,它特别有用,因为它能够...
21 分钟阅读
10 种加快 Python 代码速度的方法 Python 是一种高级解释型编程语言,以其简洁和清晰而闻名。它支持几种编程范例,包括过程式、面向对象式和函数式编程。Python 的动态类型和自动内存管理有助于快速开发和...
阅读 4 分钟
在这个问题中,我们得到两个长度为 N 的数组,其中 N 是我们可用的物品数量。其中一个数组包含单个物品的利润值,第二个数组包含物品的重量。我们还...
阅读 6 分钟
简介 Python 中最有用的数据操作库之一是 Pandas。此外,它还提供了一系列结构化数据函数。实际上,特别是对于 DataFrame,人们通常只需要考虑某个列的唯一值。在本章中,我们将...
阅读 4 分钟
Python 有许多本地数据类型,如整数、浮点数、复数、布尔值等。以下是一些顶级的本地数据类型程序列表:Python 程序:两个矩阵相加 Python 程序:两个矩阵相乘 Python 程序:矩阵转置 Python 程序:按字母顺序对单词进行排序 Python...
阅读1分钟
竞争性编程是一种智力运动,参与者必须在预定的时间内解决特定的算法和计算挑战。Python 因其易用性、可读性和丰富的库而在竞争性程序员中越来越受欢迎。使用 Python 的优势 1. 可读性...
阅读 4 分钟
简介:在不断发展的数字通信领域,电子邮件仍然是个人和专业通信的重要渠道。然而,随着电子邮件的广泛使用,垃圾邮件这一长期存在的问题也随之而来。垃圾邮件,也称为未经请求或不需要的电子邮件,会堵塞收件箱,浪费时间,并且...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India