Python 是一种多功能语言,具有多种功能,可以执行从基本编程到执行复杂的机器学习任务的各种任务。现在如果我们谈论魔术方法,这也是Python中自定义类行为的强大工具之一。它也称为 dunder(双下划线) 方法,因为这些是由双下划线包围的特殊方法(例如,__init__、__str__),使您能够定义自定义类在对它们执行某些操作时如何工作。让我们深入博客来详细了解这些神奇的方法以及它们的作用。
目录:
Python 中的魔法方法是什么?
一开始我们了解到Python中的魔术方法是双下划线包围的特殊方法。这些方法是预定义的方法,允许对象具有一些特定的行为。这些主要用于执行称为重载的操作以及算术运算(加法、减法)、比较运算、字符串表示等。魔术方法由 Python 隐式调用,从而提供了一种将自定义对象平滑地集成到 Python 环境中的方法。
控制对象创建过程
- 对象初始化:__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”分别分配给名称和课程。创建学生对象时,这些属性会自动初始化。
- 创建对象:__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)
塑造您的数据科学职业生涯
与我们的数据科学培训一起成长
将对象表示为字符串
- __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)
- __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 设计,一旦掌握了它们,就可以通过练习来正确使用它们。