美文网首页Python小哥哥每天学一点python
小蛇学python(20)魔法函数

小蛇学python(20)魔法函数

作者: 跌跌撞撞小红豆 | 来源:发表于2020-01-06 15:18 被阅读0次

    什么是魔法函数?

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

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

    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函数让类拥有了长度属性

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

    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这一个方法;如果只重写一个方法,则会调用该方法

    总结

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

    相关文章

      网友评论

        本文标题:小蛇学python(20)魔法函数

        本文链接:https://www.haomeiwen.com/subject/qarkactx.html