Python教程:你一定要知道的26个Python魔术方法(快记下来)

简介: Python中的魔术方法是指以双下划线 __ 开头和结尾的特殊方法,也被称为特殊方法或魔术方法。这些方法在类中具有特殊的用途,它们可以让你自定义类的行为,使得你的对象可以像内置类型一样工作。

 Python中的魔术方法是指以双下划线 __ 开头和结尾的特殊方法,也被称为特殊方法或魔术方法。这些方法在类中具有特殊的用途,它们可以让你自定义类的行为,使得你的对象可以像内置类型一样工作。这些方法由解释器调用,而不是你直接调用它们。例如,当你使用 + 运算符时,实际上是调用了对象的 __add__ 方法。这些方法允许你重载运算符、改变对象的构造和初始化行为、自定义属性访问等等。使用魔术方法可以使你的代码更具表现力、可读性和灵活性。

Python 3.8.6中的一些常见魔术方法包括:

  • __init__: 对象初始化方法,在创建对象时调用。
  • __repr__: 返回对象的“官方”字符串表示形式。
  • __str__: 返回对象的“非正式”或友好字符串表示形式。
  • __len__: 返回对象的长度。
  • __getitem__: 获取对象中指定键的值。
  • __setitem__: 设置对象中指定键的值。
  • __delitem__: 删除对象中指定键的值。
  • __iter__: 返回一个迭代器对象。
  • __contains__: 检查对象是否包含指定的元素。
  • __call__: 实例对象作为函数调用时调用。
  • __eq__: 定义对象的相等性。
  • __lt__, __le__, __gt__, __ge__: 定义对象的比较行为。
  • __add__, __sub__, __mul__, __truediv__, __floordiv__, __mod__: 定义对象的算术运算。
  • __getattr__, __setattr__, __delattr__: 处理对象属性的获取、设置和删除。
  • __enter__, __exit__: 定义在使用 with 语句时对象的上下文管理行为。

以下是每个魔术方法的详细解释和示例代码:

__init__

初始化方法,在创建对象时调用。通常用于初始化对象的属性。

class MyClass:
    def __init__(self, x):
        self.x = x
obj = MyClass(5)
print(obj.x)  # 输出: 5

image.gif

__repr__

返回对象的“官方”字符串表示形式。通常用于开发者。

class MyClass:
    def __repr__(self):
        return 'MyClass()'
obj = MyClass()
print(repr(obj))  # 输出: MyClass()

image.gif

__str__

返回对象的“非正式”或友好字符串表示形式。通常用于用户。

class MyClass:
    def __str__(self):
        return 'MyClass instance'
obj = MyClass()
print(str(obj))  # 输出: MyClass instance

image.gif

__len__

返回对象的长度。

class MyList:
    def __init__(self, data):
        self.data = data
    def __len__(self):
        return len(self.data)
my_list = MyList([1, 2, 3, 4, 5])
print(len(my_list))  # 输出: 5

image.gif

__getitem__

获取对象中指定键的值。

class MyDict:
    def __init__(self, data):
        self.data = data
    def __getitem__(self, key):
        return self.data[key]
my_dict = MyDict({'a': 1, 'b': 2})
print(my_dict['a'])  # 输出: 1

image.gif

__setitem__

设置对象中指定键的值。

class MyDict:
    def __init__(self):
        self.data = {}
    def __setitem__(self, key, value):
        self.data[key] = value
my_dict = MyDict()
my_dict['a'] = 1
print(my_dict['a'])  # 输出: 1

image.gif

__delitem__

删除对象中指定键的值。

class MyDict:
    def __init__(self):
        self.data = {'a': 1, 'b': 2}
    def __delitem__(self, key):
        del self.data[key]
my_dict = MyDict()
del my_dict['a']
print(my_dict.data)  # 输出: {'b': 2}

image.gif

__iter__

返回一个迭代器对象。

class MyIterable:
    def __iter__(self):
        return iter([1, 2, 3, 4, 5])
obj = MyIterable()
for item in obj:
    print(item)  # 输出: 1 2 3 4 5

image.gif

__contains__

检查对象是否包含指定的元素。

class MyList:
    def __init__(self, data):
        self.data = data
    def __contains__(self, item):
        return item in self.data
my_list = MyList([1, 2, 3, 4, 5])
print(3 in my_list)  # 输出: True

image.gif

__call__

实例对象作为函数调用时调用。

class MyCallable:
    def __call__(self, x):
        return x * 2
obj = MyCallable()
print(obj(5))  # 输出: 10

image.gif

__eq__

定义对象的相等性。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __eq__(self, other):
        return self.x == other.x and self.y == other.y
p1 = Point(1, 2)
p2 = Point(1, 2)
print(p1 == p2)  # 输出: True

image.gif

__lt__, __le__, __gt__, __ge__

定义对象的比较行为。

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y
    def __lt__(self, other):
        return self.x < other.x and self.y < other.y
p1 = Point(1, 2)
p2 = Point(2, 3)
print(p1 < p2)  # 输出: True

image.gif

__add__, __sub__, __mul__, __truediv__, __floordiv__, __mod__

定义对象的算术运算。

class MyNumber:
    def __init__(self, value):
        self.value = value
    def __add__(self, other):
        return self.value + other.value
a = MyNumber(5)
b = MyNumber(3)
print(a + b)  # 输出: 8

image.gif

__getattr__, __setattr__, __delattr__

处理对象属性的获取、设置和删除。

class MyObject:
    def __init__(self):
        self.data = {}
    def __getattr__(self, name):
        return self.data.get(name)
    def __setattr__(self, name, value):
        self.data[name] = value
    def __delattr__(self, name):
        del self.data[name]
obj = MyObject()
obj.name = 'Alice'
print(obj.name)  # 输出: Alice

image.gif

__enter__, __exit__

定义在使用 with 语句时对象的上下文管理行为。

class MyResource:
    def __enter__(self):
        print("Entering context")
        return self
    def __exit__(self, exc_type, exc_value, traceback):
        print("Exiting context")
with MyResource() as res:
    print("Doing something inside the context")

image.gif


目录
相关文章
|
4天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
49 12
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
79 8
|
2月前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
135 7
|
2月前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
53 4
|
2月前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
55 5
|
3月前
|
Python
SciPy 教程 之 Scipy 显著性检验 9
SciPy 教程之 Scipy 显著性检验第9部分,介绍了显著性检验的基本概念、作用及原理,通过样本信息判断假设是否成立。着重讲解了使用scipy.stats模块进行显著性检验的方法,包括正态性检验中的偏度和峰度计算,以及如何利用normaltest()函数评估数据是否符合正态分布。示例代码展示了如何计算一组随机数的偏度和峰度。
41 1
|
3月前
|
BI Python
SciPy 教程 之 Scipy 显著性检验 8
本教程介绍SciPy中显著性检验的应用,包括如何利用scipy.stats模块进行显著性检验,以判断样本与总体假设间的差异是否显著。通过示例代码展示了如何使用describe()函数获取数组的统计描述信息,如观测次数、最小最大值、均值、方差等。
42 1
|
3月前
|
数据采集 数据可视化 数据挖掘
深入浅出:使用Python进行数据分析的基础教程
【10月更文挑战第41天】本文旨在为初学者提供一个关于如何使用Python语言进行数据分析的入门指南。我们将通过实际案例,了解数据处理的基本步骤,包括数据的导入、清洗、处理、分析和可视化。文章将用浅显易懂的语言,带领读者一步步掌握数据分析师的基本功,并在文末附上完整的代码示例供参考和实践。
|
3月前
|
Python
SciPy 教程 之 Scipy 显著性检验 6
显著性检验是统计学中用于判断样本与总体假设间是否存在显著差异的方法。SciPy的scipy.stats模块提供了执行显著性检验的工具,如T检验,用于比较两组数据的均值是否来自同一分布。通过ttest_ind()函数,可以获取两样本的t统计量和p值,进而判断差异是否显著。示例代码展示了如何使用该函数进行T检验并输出结果。
43 1
|
3月前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
48 1

热门文章

最新文章