ICode9

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

python中的魔法函数

2021-06-14 21:01:17  阅读:179  来源: 互联网

标签:__ 10 调用 函数 python self 魔法 .__


python中的魔法函数以双下划线开头、结尾,不能自定义。下面介绍一些:

0、特殊属性

序号名称意义备注
(1)__doc__该函数的文档字符串,没有则为 None;不会被子类继承。可写
(2)__name__该函数的文档字符串,没有则为 None;不会被子类继承。可写
(3)__qualname__一个以点号分隔的名称,显示从模块的全局作用域到该模块中定义的某个类、函数或方法的“路径”可写
(4)__module__该函数所属模块(包)的名称,没有则为 None可写
(5)__defaults__由具有默认值的参数的默认参数值组成的元组,如无任何参数具有默认值则为 None。可写
(6)__code__表示编译后的函数体的代码对象。可写
(7)__globals__对存放该函数中全局变量的字典的引用 — 函数所属模块的全局命名空间。只读
(8)__dict__命名空间支持的函数属性。可写
(9)__closure__None 或包含该函数可用变量的绑定的单元的元组。只读
(10)__annotations__包含参数标注的字典。字典的键是参数名,如存在返回标注则为 ‘return’。可写
(11)__kwdefaults__仅包含关键字参数默认值的字典。可写

(3) __qualname__

class A:
  class B:
    def test(self):
      pass
print(A.__qualname__)
# A
print(A.B.__qualname__)
# A.B
print(A.B.test.__qualname__)
# A.B.test

(5) __defaults__

class A:
  def test(self,id=10,name='name'):
    pass
print(A.test.__defaults__)
print(A.test.__code__)
# (10, 'name')
# <code object test at 0x00000224ECB6F5D0, file "E:/WorkSpacepy/leetcode/test.py", line 2>

1、基本定制

序号名称意义备注
(1)__new__(self)静态方法,调用以创建一个 cls 类的新实例,返回对象实例。返回对象之后自动调用__init__()方法,如果没有返回值,则不会调用__init__()相关讲解1相关讲解2
(2)__init__(self)在实例被创建后,如果基类有__init__()方法,则显式的调用,以确保基类部分正确的初始化因为对象是由 __new__() 和 __init__() 协作构造完成的 (由 __new__() 创建,并由 __init__() 定制),所以 __init__() 返回的值只能是 None
(3)__del__(self)在实例将被销毁时调用del x 并不直接调用 x.__del__(), 前者会将 x 的引用计数减一,而后者仅会在 x 的引用计数变为零时被调用.
(4)__repr__(self)由内置函数repr()调用,以输出一个对象的字符串表示相关讲解1相关讲解2
(5)__str__(self)通过 str() 以及内置函数 format() 和 print() 调用以生成一个对象的字符串表示。返回值必须为一个 字符串对象。内置object会默认调用__repr__
(6)__bytes__(self)通过内置函数bytes()调用生成一个对象的字符串表示,返回一个bytes对象
(7)__format__(self,format_spec)通过 format() 内置函数、扩展、格式化字符串字面值 的求值以及 str.format() 方法调用以生成一个对象的“格式化”字符串表示。 format_spec 参数为包含所需格式选项描述的字符串。
(8)__lt__(self, other)x<y 调用 x.__lt__(y)
(9)__le__(self, other)x<=y 调用 x.__le__(y)
(10)__eq__(self, other)x==y 调用 x.__eq__(y)
(11)__ne__(self, other)x==y 调用 x.__ne__(y)
(12)__gt__(self, other)x==y 调用 x.__gt__(y)
(13)__ge__(self, other)x>=y 调用 x.__ge__(y)
(14)__hash__(self, other)通过内置函数 hash() 调用以对哈希集的成员进行操作,属于哈希集的类型包括 set、frozenset 以及 dict。__hash__() 应该返回一个整数。对象比较结果相同所需的唯一特征属性是其具有相同的哈希值
(15)__bool__(self, other)调用此方法以实现真值检测以及内置的 bool() 操作;应该返回 False 或 True。如果未定义此方法,则会查找并调用 __len__() 并在其返回非零值时视对象的逻辑值为真。如果一个类既未定义 __len__() 也未定义 __bool__() 则视其所有实例的逻辑值为真。

2、自定义属性访问

(1) __getattr__()
(2) __getattribute__()
(3) __setattr__()
(4) __delattr__()
(5) __dir__()
(6) __class__()
(7) __get__()
(8) __set__()
(9) __delete__()
(10) __set_name__()
(11) __slots__()
(12) __init_subclass___()
(13) __prepare__()
(14) __instancecheck__()
(15) __subclasscheck__()
(16) __class_getitem__()
(17) __call__()
(18) __len__()
(19) __length_hint__()
(20) __getitem__()
(21) __setitem__()
(22) __delitem__()
(23) __missing__()
(24) __iter__()
(25) __reversed__()
(26) __contains__()

3、模拟数字类型

(1) __add__()
(2) __sub__()
(3) __mul__()
(4) __matmul__()
(5) __truediv__()
(6) __floordiv__()
(7) __mod__()
(8) __divmod__()
(9) __pow__()
(10) __lshift__()
(11) __rshift__()
(12) __and__()
(13) __xor__()
(14) __or__()
以下表示实现具有反射操作数的二进制运算。
(1) __radd__()
(2) __rsub__()
(3) __rmul__()
(4) __rmatmul__()
(5) __rtruediv__()
(6) __rfloordiv__()
(7) __rmod__()
(8) __rdivmod__()
(9) __rpow__()
(10) __rlshift__()
(11) __rrshift__()
(12) __rand__()
(13) __rxor__()
(14) __ror__()
原地操作
(1) __iadd__()
(2) __isub__()
(3) __imul__()
(4) __imatmul__()
(5) __itruediv__()
(6) __ifloordiv__()
(7) __imod__()
(8) __idivmod__()
(9) __ipow__()
(10) __ilshift__()
(11) __irshift__()
(12) __iand__()
(13) __ixor__()
(14) __ior__()
其他
(1) __neg__()
(2) __pos__()
(3) __abs__()
(4) __invert__()
(5) __complex__()
(6) __int__()
(7) __float__()
(8) __index__()
(9) __round__()
(10) __trunc__()
(11) __floor__()
(12) __ceil__()

4、其他

(1) __enter__()
(2) __exit__()
(3) __await__()
(4) __aiter__()
(5) __anext__()
(6) __aenter__()
(7) __aexit__()

参考:python文档

标签:__,10,调用,函数,python,self,魔法,.__
来源: https://blog.csdn.net/qq_36561737/article/details/117909699

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

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

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

ICode9版权所有