Python的部分魔术方法(特殊方法或者双下划线方法)

Python的部分魔术方法(特殊方法或者双下划线方法)

__ len __

  1. python内置类型(list, str, bytearray)在使用len()方法时:__ len __ 直接返回PyVarObject里的ob_size属性。

    PyVarObject是表示内存长度可变的内置对象的C语言结构体

  2. 自定义对象类型直接调用 __ len __ 方法。

  3. 魔术方法的调用大部分是隐式的。

__ repr __ 和 __ str __

  1. __ repr __ 是在交互模式下输入实例,按下回车自动调用。

    __ str __ 是在调用print()或者str()函数时调用。

  2. __ repr _ _ 和 __ str __ 二选一的时候最好用 __ repr __ ,因为找不到 __ str __方法时,会自动用 __ repr __ 代替。

__ add __

执行运算符 + 号时调用

__ mul __

执行运算符 * 号时调用

两个算数方法返回的值都是新创建的对象,被操作的两个值还是原封不动, 中缀运算符的基本原则就是不改变操作对象,而 是产出一个新的值。

__ bool __

尽管 Python 里有 bool 类型,但实际上任何对象都可以用于需要布尔值 的上下文中(比如 if 或 while 语句,或者 and、or 和 not 运算 符)。为了判定一个值 x 为真还是为假,Python 会调用 bool(x),这个 函数只能返回 True 或者 False。 默认情况下,我们自己定义的类的实例总被认为是真的,除非这个类对 __ bool __ 或者 __ len __ 函数有自己的实现。bool(x) 的背后是调用 x. __ bool __ () 的结果;如果不存在 __ bool __ 方法,那么 bool(x) 会尝试调用

x. _ _ len _ _ ()。若返回 0,则 bool 会返回 False;否则返回 True。

跟运算符无关的特殊方法

类别方法名
字符串 / 字节序列表示形式__ repr __ 、__ str __ 、 __ format __ 、 __ bytes __
数值转换__ abs __ 、 __ bool __ 、 _ complex __ 、_ int __ 、__ float __ 、__ hash __ 、__ index __
集合模拟__ len __ 、__ getitem __ 、__ setitem __ 、__ delitem __ 、__ contains__
迭代枚举__ iter __ 、__ reversed __ 、__ next__
可调用模拟__ call__
上下文管理__ enter__ 、__ exit__
实例创建和销毁__ new__ 、__ init__ 、__ del__
属性管理__ getattr __ 、__ getattribute__ 、__ setattr__ 、__ delattr __ 、__ dir__
属性描述符__ get__ 、__ set__ 、__ delete__
跟类相关的服务__ prepare __ 、__ instancecheck __ 、__ subclasscheck__

len不是普通方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值