深入Python3(十四) 特殊方法名称

0.摘要

  在本书其它几处,我们已经见识过一些特殊方法——即在使用某些语法时 P y t h o n Python Python 所调用的“神奇”方法。使用特殊方法,类用起来如同序列、字典、函数、迭代器,或甚至像个数字!本附录为我们已经见过特殊方法提供了参考,并对一些更加深奥的特殊方法进行了简要介绍。

1.基础知识

在这里插入图片描述

  1. _ _ i n i t _ _ ( ) \_\_init\_\_() __init__() 方法的调用发生在实例被创建之后。如果要控制实际创建进程,请使用 _ _ n e w _ _ ( ) \_\_new\_\_() __new__() 方法。
  2. 按照约定, _ _ r e p r _ _ ( ) \_\_repr\_\_() __repr__() 方法所返回的字符串为合法的 P y t h o n Python Python 表达式。
  3. 在调用 p r i n t ( x ) print(x) print(x) 的同时也调用了 _ _ s t r _ _ ( ) \_\_str\_\_() __str__()方法。
  4. 由于 b y t e s bytes bytes 类型的引入而从 P y t h o n 3 Python 3 Python3 开始出现。
  5. 按照约定, f o r m a t _ s p e c format\_spec format_spec 应当遵循相关的规范。

  在此多提一下 r e p r repr repr的用法:
在这里插入图片描述

在这里插入图片描述

2.行为方式与迭代器类似的类

  在《迭代器》一章中,我们已经学习了如何使用 _ _ i t e r _ _ ( ) \_\_iter\_\_() __iter__() _ _ n e x t _ _ ( ) \_\_next\_\_() __next__() 方法从零开始创建迭代器。
在这里插入图片描述

  1. 无论何时创建迭代器都将调用 _ _ i t e r _ _ ( ) \_\_iter\_\_() __iter__() 方法。这是用初始值对迭代器进行初始化的绝佳之处。
  2. 无论何时从迭代器中获取下一个值都将调用 _ _ n e x t _ _ ( ) \_\_next\_\_() __next__() 方法。
  3. _ _ r e v e r s e d _ _ ( ) \_\_reversed\_\_() __reversed__() 方法并不常用。它以一个现有序列为参数,并将该序列中所有元素从尾到头以逆序排列生成一个新的迭代器。
    在这里插入图片描述

   P y t h o n 3 Python 3 Python3 将会调用 s e q . _ _ i t e r _ _ ( ) seq.\_\_iter\_\_() seq.__iter__() 以创建一个迭代器,然后对迭代器调用 _ _ n e x t _ _ ( ) \_\_next\_\_() __next__() 方法以获取 x x x 的每个值。当 _ _ n e x t _ _ ( ) \_\_next\_\_() __next__() 方法引发 S t o p I t e r a t i o n StopIteration StopIteration 例外时, f o r for for 循环正常结束。

3.计算属性

在这里插入图片描述

  1. 如果某个类定义了 _ _ g e t a t t r i b u t e _ _ ( ) \_\_getattribute\_\_() __getattribute__() 方法,在每次引用属性或方法名称时 P y t h o n Python Python都调用它(特殊方法名称除外,因为那样将会导致讨厌的无限循环)。
  2. 如果某个类定义了 _ _ g e t a t t r _ _ ( ) \_\_getattr\_\_() __getattr__() 方法, P y t h o n Python Python 在访问不存在的属性时会调用它。如果实例 x x x 定义了属性 c o l o r color color x . c o l o r x.color x.color 将不会调用 x . _ _ g e t a t t r _ _ ( ′ c o l o r ′ ) x.\_\_getattr\_\_('color') x.__getattr__(color);而只会返回 x . c o l o r x.color x.color 已定义好的值。
  3. 无论何时给属性赋值,都会调用 _ _ s e t a t t r _ _ ( ) \_\_setattr\_\_() __setattr__() 方法。
  4. 无论何时删除一个属性,都将调用 _ _ d e l a t t r _ _ ( ) \_\_delattr\_\_() __delattr__() 方法。
  5. 如果定义了 _ _ g e t a t t r _ _ ( ) \_\_getattr\_\_() __getattr__() _ _ g e t a t t r i b u t e _ _ ( ) \_\_getattribute\_\_() __getattr
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值