Python魔法方法

参考:Python:实例讲解Python中的魔法函数(高级语法) - 知乎


目录

1.__name__

2.__class__

 3.__call__、( )

4.__str__、__repr__

5.__contains__

6.__iter__、__next__

7.__getattribute__、__getattr__、__setattr__、__delattr__、.

8. __dict__、dir()

9.__setitem__、__getitem__、__delitem__、[ ]


1.__name__

运行当前文件时,__name__的值为'__main__'

  • 示例

  •  运行结果

2.__class__

实例调用__class__时会指向其对应的类,然后可以再调用类的属性

  • 示例

  •  运行结果

可以看到,A是通过type来定义,type有三个参数:类名、继承、私有化

  • 示例

  •  运行结果 

 3.__call__、( )

让实例可以像函数一样被调用,即a()相当于a.__call__()

  • 示例

 

  • 运行结果

4.__str__、__repr__

用于输出实例的基本信息

5.__contains__

对于自定义类,在使用in语句时,将调用__contains__方法

  • 示例

  • 运行结果

6.__iter__、__next__

(1)for ... in 本质上先调用了可迭代对象的__iter__方法得到一个迭代器,然后不断调用迭代器的__next__方法获取下一个值,直到遇到StopIteration的异常后结束循环。

  • 判断是否是可迭代对象(注意必须是类的实例,因为__iter__方法的返回值self指向实例本身)
from collections.abc import Iterable
print(isinstance(list, Iterable))
print(isinstance(list(), Iterable))

(2)python要求迭代器也是可迭代的,还要为迭代器实现__iter__方法。__iter__方法返回一个迭代器,由于实现了__iter__方法的对象即为可迭代对象,因此返回对象本身即可。

def __iter__(self):
    return self

7.__getattribute__、__getattr__、__setattr__、__delattr__、.

使用xxx.xxx时会调用__xxxattr__方法

python __getattribute__、__getattr__、__setattr___hllyzms的博客-CSDN博客___setattr__

注意重写__getattribute__时容易陷入无限循环,__setattr__同理

def __getattribute__(self, attr):
    print('nothing')
    return self.name
    # object.__getattribute__(self, attr)
    # super().__getattribute__(attr)

self.name实际调用了self.__getattribute__('name'),应调用基类的__getattribute__来实现

8. __dict__、dir()

9.__setitem__、__getitem__、__delitem__、[ ]

使用方括号时会调用__xxxitem__方法

__setitem__:当属性被赋值时调用该方法

__getitem__:当访问不存在的属性时调用该方法

__delitem__:当删除属性时调用该方法

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值