Python有哪些神奇方法以及如何使用它们?
Python 鲜为人知但有价值的功能之一是能够在对象上实现魔术方法。魔术方法允许您编写更清晰、直观且更易于理解的代码。
魔术方法允许您创建接口以更 Python 的方式与对象交互。本文介绍了魔术方法,描述了创建它们的最佳实践,并描述了您将遇到的常见魔术方法。
Python有哪些神奇方法以及如何使用它们?到底有什么神奇的方法呢?魔术方法是定义 Python 对象在对其执行常见操作时的行为方式的 Python 方法。这些方法是在方法名称前后使用双下划线明确定义的。
因此,这些通常称为 dunder 方法,例如双下划线。您可能已经遇到过的一个常见的 dunder 方法是__init__()方法,它用于定义类构造函数。
Dunder 方法通常不打算在代码中直接调用。相反,它是在程序执行期间由解释器调用的。
为什么神奇的方法有用?魔术方法是 Python 面向对象编程中的一个有用概念。使用它们来指定在常见内置操作中使用自定义数据类型时的行为。这些操作包括:
🟢 算术运算
🟢 比较运算
🟢 生命周期操作
🟢 表情操作
以下各节说明如何实现魔术方法,这些方法定义应用程序在上述所有类别中使用时的行为方式。
如何定义魔术方法如前所述,魔术方法指定对象的行为。因此,它们被定义为对象类的一部分。由于它们是对象类的一部分,因此它们接收self作为第一个参数,即对对象本身的引用。
根据解释器如何调用它,它可以接受其他参数。名称前后也有两个下划线明确定义。
执行到目前为止,我们讨论的大部分内容似乎都是理论性的和抽象的。在本节中,我们将实现一个简单的 Rectangle 类。
该类具有长度和宽度属性。 __init__ 方法允许您在实例化时指定这些属性。此外,您可以使用== 、 <和>运算符来比较不同的矩形,看看它们是否等于、小于或大于另一个矩形。最后,矩形必须能够提供有意义的字符串表示。
设置您的编码环境本教程需要Python运行环境。您可以使用本地编译器或使用在线 Python 编译器。
创建矩形类让我们从定义 Rectangle 类开始。
class Rectangle:
pass 创建构造函数方法接下来,让我们创建第一个魔术方法:类构造函数方法。此方法检索高度和宽度并将它们保存为类实例的属性。
class Rectangle:
def __init__(self, height, width):
self.height = height
self.width = width 创建字符串表示的魔术方法接下来,创建一个方法,允许您的类生成代表您的对象的人类可读的字符串。每次调用str()函数时都会调用此方法,并传递Rectangle类的实例作为参数。当调用需要字符串参数的函数(例如print函数)时,也会调用此方法。
class Rectangle:
def __init__(self, height, width):
self.height = height
self.width = width
def __str__(self):
return f'Rectangle({self.height}, {self.width})' __str__()方法必须返回表示该对象的字符串。在本例中,它返回Rectangle(
创建用于比较操作的魔术方法接下来,为等于、小于和大于运算创建比较运算符。这称为运算符重载。要创建它们,请分别使用魔术方法__eq__ 、 __lt__和__gt__ 。这些方法在比较矩形面积后返回布尔值。
class Rectangle:
def __init__(self, height, width):
self.height = height
self.width = width
def __str__(self):
return f'Rectangle({self.height}, {self.width})'
def __eq__(self, other):
""" Checking for equality """
return self.height * self.width == other.height * other.width
def __lt__(self, other):
""" Checking if the rectangle is less than the other one """
return self.height * self.width < other.height * other.width
def __gt__(self, other):
""" Checking if the rectage is greater than the other one """
return self.height * self.width > other.height * other.width如您所见,这些方法采用两个参数。第一个是当前矩形,第二个是要比较的其他值。该值可以是另一个 Rectangle 实例或任何其他值。如何进行比较的逻辑以及比较返回 true 的条件完全取决于您。
常见的魔术方法下一节将介绍您将遇到和使用的常见魔法方法。
#1.算术运算 993 镜头_so当类的实例放置在算术符号的左侧时,将调用算术魔术方法。使用两个参数调用此方法。第一个参数是对实例的引用。第二个值是符号右侧的对象。以下是方法和标志:
姓名方法符号解释添加__add__ +实施补充。减法__sub__ –实施减法。乘法__mul__ *实现乘法分配__div__ /实行分裂。楼层分类__楼层划分__ //实行楼层分割。 #2.比较运算 293 镜头_so与算术魔术方法类似,当正在定义的类的实例放置在比较运算符的左侧时,将调用这些方法。也像算术魔术方法一样,它们是用两个参数调用的。第一个是对对象实例的引用。第二个是对符号右侧值的引用。
姓名方法符号解释少于__lt__ <实现小于比较大__gt__ >实现大于比较等于__eq__ ==实现相等比较以下__le__ >=实现下面的比较就这样__ge__ <=执行上面的比较。 #3。生命周期操作第739章调用这些方法是为了响应对象的各种生命周期方法,例如实例化和删除。构造函数__init属于这一类。下表列出了此类中的常用方法。
姓名方法解释构造函数__init__每当删除已定义类的对象时都会调用此方法。您可以使用它来执行清理操作,例如关闭打开的文件。删除__del__每当删除已定义类的对象时都会调用此方法。您可以使用它来执行清理操作,例如关闭打开的文件。新的__新的__第一次实例化指定类的对象时调用__new__方法。此方法在构造函数之前调用,并采用类和附加参数。返回该类的一个实例。在大多数情况下它不会很有用,但我会在这里详细解释它。 #4。表达操纵 44 次射击_so姓名方法解释斯特__str__返回对象的人类可读字符串表示形式。当您调用str()函数并将类的实例作为参数传递时,将调用此方法。当将实例传递给print()和format()函数时也会调用此函数。它旨在提供应用程序的最终用户可以理解的字符串。经理__代表__返回对象的字符串表示形式以供开发人员使用。理想情况下,返回的字符串应该包含丰富的信息,以便可以仅从该字符串构造对象的相同实例。 创建魔术方法的最佳实践魔术方法非常神奇,可以简化您的代码。但是,使用时请务必记住以下几点:
谨慎使用——在类中实现太多魔术方法可能会使您的代码难以理解。限制自己只实施必需的部分。在使用 __setatrr__ 和 __getattr__ 等方法之前,请务必了解它们对性能的影响。记录你的魔法方法的行为,以便其他开发人员确切地知道它们是如何工作的。这使得在需要时可以轻松使用和调试它们。最后一句话这次,我们引入了魔术方法作为创建可在内置操作中使用的类的方法。我们还讨论了它们是如何定义的,并提供了一个实现魔术方法的类的示例。接下来,我们讨论了您可能使用和需要的不同方法,然后分享了一些需要记住的最佳实践。
接下来,您可能想了解如何在 Python 中实现 Counter 类。
小米手机SN码的查找方法