原来之前使用的__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): |
暂时就这么多, 以后有用到新的继续水~