什么是魔法函数?
下面我们来见识一些常见的魔法函数
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这一个方法;如果只重写一个方法,则会调用该方法
总结
魔法函数让编程更加优美,效率更加高。同时注意尽量不要自己定义魔法函数,这样会产生某些冲突。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有