Python 中的神奇方法 – Intellipaat 博客

Python 中的神奇方法 – Intellipaat 博客

科技

Python 是一种多功能语言,具有多种功能,可以执行从基本编程到执行复杂的机器学习任务的各种任务。现在如果我们谈论魔术方法,这也是Python中自定义类行为的强大工具之一。它也称为 dunder(双下划线) 方法,因为这些是由双下划线包围的特殊方法(例如,__init__、__str__),使您能够定义自定义类在对它们执行某些操作时如何工作。让我们深入博客来详细了解这些神奇的方法以及它们的作用。

目录:

Python 中的魔法方法是什么?

一开始我们了解到Python中的魔术方法是双下划线包围的特殊方法。这些方法是预定义的方法,允许对象具有一些特定的行为。这些主要用于执行称为重载的操作以及算术运算(加法、减法)、比较运算、字符串表示等。魔术方法由 Python 隐式调用,从而提供了一种将自定义对象平滑地集成到 Python 环境中的方法。

控制对象创建过程

  1. 对象初始化:__init__

__init__ 方法用于在创建类的实例时初始化对象的属性。

现在让我们通过一个例子来理解同样的事情:

class Student:
def __init__(self, name, course):
self.name = name
self.course = course
student = Student("Ashna", “Data Science”)
print(student.name)

#输出:

Ashna

__init__ 方法将值“Ashna”和“Data Science”分别分配给名称和课程。创建学生对象时,这些属性会自动初始化。

  1. 创建对象:__new__():

__new__() 是一种特殊方法,用于创建类的实例。它主要在 __init__() 方法之前调用,并且主要在您想要控制对象的创建过程时使用,例如在处理不可变对象(例如元组和字符串)时。

现在让我们举个例子:

class Customized:
def __new__(cls, *args, **kwargs):
print("We are now creating the instance...")
#calling of the parent class
instance = super().__new__(cls)
__new__()
return instance
def __init__(self, value):
print("Initializing your instance...")
self.number = number
obj = Customized(93)
print(obj.number)

塑造您的数据科学职业生涯

与我们的数据科学培训一起成长

测验图标测验图标



将对象表示为字符串

  1. __str__():

它用于定义对象的用户友好表示。当您打印对象时,它会为您提供人类可读的输出。当您使用作为参数传递的类实例调用 str() 函数时,Python 在内部使用此方法。

让我们举一个同样的例子:

class Student:
def __init__(self, course, marks):
self.course = course
self.marks = marks
def __str__(self):
return f"Student(course={self.course}, marks={self.marks})"
student = Student("Data Science", 70)
print(student)
  1. __repr__():

它用于定义对象的字符串表示形式。如果您打印一个对象或在 Python 交互式 shell 中检查它,则此方法用于决定显示的输出。通过提供有关对象的有意义的结果,可以更轻松地进行调试。

例如:

class Student:
def __init__(self, course, marks):
self.course = course
self.marks = marks
def __repr__(self):
return f"Student(course='{self.course}', marks={self.marks})"

# 用法示例

student = Student("Data Science", 80)
print(student)

输出:

Student(course='Data Science', marks=80)

支持自定义类中的运算符重载

算术运算符

算术运算符的魔术方法可让您了解类中的对象如何响应数学运算。下面是运算符列表以及魔术方法以及如何使用它的示例。

操作员 魔术方法
+ __添加__()
__sub__()
* __mul__()
/ __truediv__()
// __floordiv__()
% __mov__()
** __pow__()

让我们通过一些例子来说明:

class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
vector1 = Vector(1, 2)
vector2 = Vector(3, 4)
print(vector1 +vector2)

__add__() 方法允许 + 运算符添加两个 Vector 对象。它返回一个新的向量,其中包含 x 和 y 值的总和。

比较运算符方法

此方法给出有关如何比较对象的结果:

操作员 魔术方法
== __eq__(自己,其他)
!= __ne__(自己,其他)
< __lt__(自己,其他)
<= __le__(自己,其他)
> __gt__(自己,其他)
>= __ge__(自己,其他)

示例:

class Student:
def __init__(self, course, marks):
self.course = course
self.marks = marks
def __lt__(self, other):
return self.marks < other.marks

# 用法

student1 = Student("Data Science", 80)
student2 = Student("Discrete Mathematics", 90)
print(student1 < student2)

输出:

True

获得 100% 的徒步旅行!

立即掌握最需要的技能!

结论

Python 中的魔术方法使您能够向类添加自定义行为,通过重写 __str__、__len__ 或 __add__ 等方法,使对象的行为类似于内置类型。在 Python 中,魔术方法允许您定义对象如何与运算符交互、自定义字符串表示形式以及创建容器。使用这些方法可以为您的代码添加一种“神奇”的感觉,从而实现直观的 Python 设计,一旦掌握了它们,就可以通过练习来正确使用它们。