前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小蛇学python(20)魔法函数

小蛇学python(20)魔法函数

作者头像
用户2145057
发布2020-01-15 11:35:25
2960
发布2020-01-15 11:35:25
举报

什么是魔法函数?

  1. 以双下划线开头,并以双下划线结束的函数
  2. 其并不属于某个类,但是在类内实现后可以赋予类某些特性,让类变得更加灵活。

下面我们来见识一些常见的魔法函数

代码语言:javascript
复制
class Mentor:
    def __init__(self, mentor_name):
        self.mentor_name = mentor_name

init负责类内成员的初始化,当类初始化实例的时候,会将传入的值赋给类内成员,与c++中的构造函数十分相似。

代码语言:javascript
复制
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负责自动实现类成员函数的切片操作。

代码语言:javascript
复制
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函数让类拥有了长度属性

接下来介绍两个比较迷惑人的魔法函数。rperstr

代码语言:javascript
复制
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是提供给程序员用于调试程序用的。

strrepr这两个方法都是用于显示的。

当输出一个类的实例的时候,例如上面的例子中的studnet1,如果strrepr这两个方法都没有重写,会输出studnet1的地址;如果重写了,则会输出方法的返回值。

需要注意的是:如果两个方法都重写了,则优先且只调用str这一个方法;如果只重写一个方法,则会调用该方法

总结

魔法函数让编程更加优美,效率更加高。同时注意尽量不要自己定义魔法函数,这样会产生某些冲突。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档