ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python:实例讲解Python中的魔法函数(高级语法)

2021-12-10 21:31:20  阅读:232  来源: 互联网

标签:__ 函数 People Python 魔法 实例 2.1 name


介绍的魔法函数有(持续更新): __ init__()、__ str__()、__ new__()、__ unicode__()、 __ call__()、 __ len__()、 __repr__()、__ setattr__()、 __ getattr__()、 __ getattribute__()、 __ delattr__()、__ setitem__()、 __ getitem__()、__ delitem__()、 __ iter__()、__ del__()、 __dir__()、__dict__()、__exit__(),__enter(), __all__()等函数。

1.1 什么是魔法函数?

preview

 

所谓魔法函数(Magic Methods),是Python的一种高级语法,允许你在类中自定义函数(函数名格式一般为__xx__),并绑定到类的特殊方法中。比如在类A中自定义__str__()函数,则在调用str(A())时,会自动调用__str__()函数,并返回相应的结果。在我们平时的使用中,可能经常使用__init__函数(构造函数__del__函数(析构函数,其实这也是魔法函数的一种。

  • Python中以双下划线(__xx__)开始和结束的函数(不可自己定义)为魔法函数。
  • 调用类实例化的对象的方法时自动调用魔法函数。
  • 在自己定义的类中,可以实现之前的内置函数。

1.2 魔法函数有什么作用?

魔法函数可以为你写的类增加一些额外功能,方便使用者理解。举个简单的例子,我们定义一个“人”的类People,当中有属性姓名name、年龄age。让你需要利用sorted函数对一个People的数组进行排序,排序规则是按照name和age同时排序,即name不同时比较name,相同时比较age。由于People类本身不具有比较功能,所以需要自定义,你可以这么定义People类:

class People(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        return

    def __str__(self):
        return self.name + ":" + str(self.age)

    def __lt__(self, other):
        return self.name < other.name if self.name != other.name else self.age < other.age


if __name__=="__main__":

    print("\t".join([str(item) for item in sorted([People("abc", 18),
        People("abe", 19), People("abe", 12), People("abc", 17)])]))

输出结果:

abc:17	abc:18	abe:12	abe:19

上个例子中的__lt__函数即less than函数,即当比较两个People实例时自动调用。

2. 常见的魔法函数

我们将魔法方法分为:非数学运算和数学运算两大类。

2.1 非数学运算

2.1.1 字符串表示

__repr__函数和__str__函数:

初识CV:字符串表示:__repr__函数和__str__函数:25 赞同 · 12 评论文章

2.1.2 集合、序列相关

__len__函数、__getitem__函数、__setitem__函数、__delitem__函数和__contains__函数:

初识CV:集合、序列相关:__len__函数、__getitem__函数、__setitem__函数、__delitem__函数和__contains__函数18 赞同 · 8 评论文章

2.1.3 迭代相关

__iter__函数和__next__函数:

初识CV:迭代相关:__iter__函数和__next__函数21 赞同 · 0 评论文章

2.1.4 可调用

__call__函数:

初识CV:可调用:__call__函数24 赞同 · 2 评论文章

2.1.5 with上下文管理器

__enter__函数和__exit__函数:

初识CV:with上下文管理器:__enter__函数和__exit__函数10 赞同 · 0 评论文章

2.1.6 数值转换

__abs__函数、__bool__函数、__int__函数、__float__函数、__hash__函数和__index__函数:

2.1.7 元类相关

__new__函数和__init__函数:

初识CV:元类相关:__new__函数和__init__函数13 赞同 · 1 评论文章

2.1.8 属性相关

__getattr__函数、__setattr__函数、__getattribute__函数、__setattribute__函数和__dir__函数:

初识CV:属性相关:__getattr__函数、__setattr__函数、__getattribute__函数、__setattribute__函数和__dir__函数:10 赞同 · 0 评论文章

2.1.9 属性描述符

__get__函数、__set__函数和__delete_函数:

初识CV:属性描述符:__get__函数、__set__函数和__delete_函数11 赞同 · 1 评论文章

2.1.10 协程

__await__函数、__aiter__函数、__anext__函数、__aenter__函数和__aexit__函数

2.2 数学运算

2.2.1 一元运算符

__neg__ (-)、__pos__ (+)和__abs__函数。

2.2.2 二元运算符

__lt__ (<)、__le__ (<=)、__eq__ (==)、__ne__ (!=)、__gt__ (>)和__ge__ (>=)。

2.2.3 算术运算符

__add__ (+)、__sub__ (-)、__mul__ (*)、__truediv__ (/)、__floordiv__ (//)、__mod__ (%)、__divmod__ 或divmod()、__pow__ 或pow() (**)和__round__ 或round()。

2.2.4 反向算术运算符

__radd__、__rsub__、__rmul__、__rtruediv__、__rfloordiv__、__rmod__、__rdivmod__和__rpow__。

2.2.5 增量赋值算术运算符

__iadd__、__isub__、__imul__、__ifloordiv__和__ipow__。

2.2.6 位运算符

__invert__ (~)、__lshift__ (<<)、__rshift__ (>>)、__and__ (&)、__or__ (|)和__xor__ (^)。

2.2.7 反向位运算符

__rlshift__、__rrshift__、__iand__、__ixor__和__ior__。

2.2.8 增量赋值运算符

__ilshift__、__irshift__、__iand__、__ixor__和__ior__。

2.3 其他魔法函数

__ unicode__()函数,__ delattr__()函数, __ del__()函数, __dict__()函数,__all__()函数:

标签:__,函数,People,Python,魔法,实例,2.1,name
来源: https://blog.csdn.net/u012842630/article/details/121865149

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有