Python 魔法函数一览¶
非数学运算类型¶
字符串表示¶
- __repr__
- __str__
集合序列相关¶
- __len__
- __getitem__
- __setitem__
- __delitem__
- __contains__
迭代相关¶
- __iter__
- __next__
可调用¶
- __call__
with 上下文管理器¶
- __enter__
- __exit__
数值转换¶
- __abs__
- __bool__
- __int__
- __float__
- __hash__
- __index__
元类相关¶
- __new__
- __init__
属性相关¶
- __getattr__
- __setattr__
- __getattribute__
- __setattribute__
- __dir__
属性描述符¶
- __get__
- __set__
- __delete__
协程¶
- __await__
- __aiter__
- __anext__
- __aenter__
- __aexit__
数学运算类型¶
一元运算符¶
- __neg__(-)
- __pos__(+)
- __abs__
二元运算符¶
- __lt__(<)
- __le__ <=
- __eq__ ==
- __ne__ !=
- __gt__ >
- __ge__ >=
算术运算符¶
- __add__ +
- __sub__ -
- __mul__ *
- __truediv__ /
- __floordiv__ //
- __mod__ %
- __divmod__ 或 divmod()
- __pow__ 或 ** 或 pow()
- __round__ 或 round()
反向算术运算符¶
- __radd__
- __rsub__
- __rmul__
- __rtruediv__
- __rfloordiv__
- __rmod__
- __rdivmod__
- __rpow__
增量赋值算术运算符¶
- __iadd__
- __isub__
- __imul__
- __itruediv__
- __ifloordiv__
- __imod__
- __ipow__
位运算符¶
- __invert__ ~
- __lshift__ <<
- __rshift__ >>
- __and__ &
- __or__ |
- __xor__ ^
反向位运算符¶
- __rlshift__
- __rrshift__
- __rand__
- __rxor__
- __ror__
增量赋值位运算符¶
- __ilshift__
- __irshift__
- __iand__
- __ixor__
- __ior__
调试工具¶
- notebook
首先使用 pip install -i https://douban.com/simple notebook
安装
然后运行 ipython notebook
字符串表示¶
- __str__
在打印一个实例化对象的时候, python 默认会调用 str (对象), 对应的魔法函数是 __str__
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
company = Company(["tom", "jerry", "bya"])
print(company)
print(str(company))
#------------------------------------
<__main__.Company object at 0x000001AFBB114B88>
<__main__.Company object at 0x000001AFBB114B88>
- __repr__
__repr__是在开发模式下调用的
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
company = Company(["tom", "jerry", "bya"])
print(company)
company
#------------------------------------
<__main__.Company object at 0x0000020A9D7672B0>
<__main__.Company at 0x20a9d7672b0>
再次强调, __repr__不是因为该类继承了某一个对象才能去写这个方法, 魔法函数可以写到任何一个定义的类中去, 然后 python 解释器识别出这个对象有该特性。接着,在调试模式下,company 会被解释器转换为 repr(company), 然后再去调用 company.__repr__().
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __str__(self):
return ','.join(self.employee)
def __repr__(self):
return '.'.join(self.employee)
company = Company(["tom", "jerry", "bya"])
print(company) # str 输出
company # repr 输出
tom,jerry,bya # 打印对象
tom,jerry,bya # 调试模式