Python3魔法方法入门

魔法方法

魔法方法总是被双下划线包围,例如__init__

魔法方法是面向对象Python的一切,如果你不知道魔法方法,说明你还没意识到面向对象Python的强大

__init__
__del__
__new__

自定义对象的算术运算符

__add__
__sub__
__mul__
__truediv__
__mod__
__divmod__
__pow__
__lshift__
__and__
__xor__
__or__


这些都是以基础内置类型作为蓝本进行定制修改。如int,可以查看内置方法
int.__dict__
重写这些方法,来达到对Python对象的自定义运算支持。类似c++的运算符重载机制。

getattr, setattr, delattr

属性访问
__getattr__(self, name)
__setattr__(self, name)
__getattribute__(self, name)
__delattr__(self, name)

生成器

是迭代器的另一种实现方式,通常迭代器需要定义一个class并实现next方法,
而生成器只需要在普通的函数func中加入yield语句。

协同程序
就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。

def libs():
  a = 0
  b = 1
  while True:
    a, b = b, a + b
    yield a

>>> for each in libs():
...     if each > 100:
...             break
...     print(each)
... 
1
1
2
3
5
8
13
21
34
55
89
>>> e = libs()
>>> e
<generator object libs at 0x7ffee149d8e0>
>>> next(e)
1   
>>> next(e)
1   
>>> next(e)
2
>>> next(e)
3
>>> next(e)
5
>>> next(e)
8
>>> next(e)
13
>>> next(e)

>>> string = 'wangdachao'
>>> next(string)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not an iterator
>>> it = iter(string)
>>> next(it)
'w'
>>> next(it)
'a'
>>> next(it)
'n'
>>> next(it)
'g'
>>> next(it)
'd'


class Fibs():
  def __init__(self):
    self.a = 0
    self.b = 1
  def __iter__(self):
    return self
  def __next__(self):
    self.a, self.b = self.b, self.a + self.b
    return self.a

e = Fibs()
>>> e
<__main__.Fibs object at 0x039D11D0>
>>> next(e)
1
>>> next(e)
1
>>> next(e)
2
>>> next(e)
3
>>> next(e)
5
>>> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值