抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

原来之前使用的__enter____exit__就是以前耳闻的魔术方法, 这次我的程序开发因为以面向对象为主, 为了实现一些python中好用的功能所以涉及到了更多方法, 这里做个小笔记

__len__

定义之后, 可以对实例使用len()函数.

1
2
3
4
5
def __len__(self):
'''
定义长度
'''
return len(self.Seq)

__getitem__

定以后, 可以对实例进行[]索引和切片操作

1
2
3
4
5
def __getitem__(self, key):
'''
添加切片索引
'''
return self.d[key]

__str__

定义后, 使用print()打印实例时会打印这个方法内返回的内容

1
2
def __str__(self):
return str(self.__dict__)

__iter__

定以后, 可对对象进行迭代操作, 比如for i in object这种. 需要注意的是, 这个方法必须要返回迭代器(可迭代对象不行).

1
2
def __iter__(self):
return (mut for mut in self.muts)

__eq____hash__

这两个放一起是因为把实例放在set()中, 想要自动去重时, 这两个都要有, 否则无法达到目的效果. 其中__eq__是使对象可被比较是否相同(==!=, is好像不可以). 注意这个方法里的other好像是固定的, 不要改动.

1
2
3
4
5
def __eq__(self, other):
'''
保证利用set特性去重
'''
return self.muts == other.muts

__hash__则本质上是对象可被哈希化, 哈希化时的哈希值会是这个方法给的哈希值

1
2
3
4
5
def __hash__(self):
'''
保证利用set特性去重
'''
return hash(self.muts)

暂时就这么多, 以后有用到新的继续水~

评论

留下友善的评论吧~