小蛇学python(20)魔法函数
什么是魔法函数?
- 以双下划线开头,并以双下划线结束的函数
- 其并不属于某个类,但是在类内实现后可以赋予类某些特性,让类变得更加灵活。
下面我们来见识少量常见的魔法函数
class Mentor: def __init__(self, mentor_name): self.mentor_name = mentor_name
init负责类内成员的初始化,当类初始化实例的时候,会将传入的值赋给类内成员,与c++中的构造函数十分类似。
class Mentor: def __init__(self, mentor_name): self.mentor_name = mentor_name def __getitem__(self, item): return self.mentor_name[item]mentor = Mentor(['A','B','C'])print(mentor[1])
getitem负责自动实现类成员函数的切片操作。
class Mentor: def __init__(self, mentor_name): self.mentor_name = mentor_name def __getitem__(self, item): return self.mentor_name[item] def __len__(self): return len(self.mentor_name)mentor = Mentor(['A','B','C'])print(len(mentor))
len函数让类拥有了长度属性
接下来详情两个比较迷惑人的魔法函数。rper和str。
class Mentor: def __init__(self, mentor_name): self.mentor_name = mentor_name def __getitem__(self, item): return self.mentor_name[item] def __len__(self): return len(self.mentor_name) def __repr__(self): return '进入函数1'print(Mentor(['A','B','C']))
str_是面向客户的,而repr面向程序员,可以了解为:str是给客户使用的,而repr是提供给程序员用于调试程序用的。
str和repr这两个方法都是用于显示的。
当输出一个类的实例的时候,例如上面的例子中的studnet1,假如str和repr这两个方法都没有重写,会输出studnet1的地址;假如重写了,则会输出方法的返回值。
需要注意的是:假如两个方法都重写了,则优先且只调用str这一个方法;假如只重写一个方法,则会调用该方法
总结
魔法函数让编程更加柔美,效率更加高。同时注意尽量不要自己定义魔法函数,这样会产生某些冲突。
说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 小蛇学python(20)魔法函数
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 小蛇学python(20)魔法函数