原来之前使用的__enter__
和__exit__
就是以前耳闻的魔术方法, 这次我的程序开发因为以面向对象为主, 为了实现一些python中好用的功能所以涉及到了更多方法, 这里做个小笔记
__len__
定义之后, 可以对实例使用len()
函数.
1 | def __len__(self): |
__getitem__
定以后, 可以对实例进行[]
索引和切片操作
1 | def __getitem__(self, key): |
__str__
定义后, 使用print()
打印实例时会打印这个方法内返回的内容
1 | def __str__(self): |
__iter__
定以后, 可对对象进行迭代操作, 比如for i in object
这种. 需要注意的是, 这个方法必须要返回迭代器(可迭代对象不行).
1 | def __iter__(self): |
__eq__
和__hash__
这两个放一起是因为把实例放在set()
中, 想要自动去重时, 这两个都要有, 否则无法达到目的效果. 其中__eq__
是使对象可被比较是否相同(==
和!=
, is
好像不可以). 注意这个方法里的other
好像是固定的, 不要改动.
1 | def __eq__(self, other): |
__hash__
则本质上是对象可被哈希化, 哈希化时的哈希值会是这个方法给的哈希值
1 | def __hash__(self): |
暂时就这么多, 以后有用到新的继续水~