Python教程

python中的魔法函数

本文主要是介绍python中的魔法函数,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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文档

这篇关于python中的魔法函数的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!