• Python中的魔术方法


    什么是魔术方法?

    在Python中,所有用"__"包起来的方法,都称为【魔术方法】。

    魔术方法一般是为了让显示器调用的,你自己并不需要调用它们。

    __init__:初始化函数

    这个方法主要是定义了对象的初始化操作。当我们新建一个对象 x=someclass() 的时候,__new__先创建类并返回类的实例,然后自动调用__init__来初始化函数的值。这两个共同构成了【构造函数】。在对象生命周期调用结束时,__del__ 方法会被调用,可以将__del__理解为“构析函数”。

    __str____repr__ 都是改变对象的字符串显示。

    如果类中定义了这个方法,当打印这个类的某个实例对象时,实际上就是在调用这个方法,打印出来的结果就是该方法所返回的值。

    class PersonInfo:
    
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f"{self.name}的个人信息"
    
    
    one_person = PersonInfo("星星", 20)
    print(one_person)
    print(str(one_person))

    运行的结果是:

    星星的个人信息
    星星的个人信息

    我们看到,print(one_person) 与 print(str(one_person)) 结果是一致的。其实,str(),当str(one_person)的时候,也就是在调用对象one_person的__str__方法。

    当类中没有定义这个方法的时候,它们俩都会自动寻找__repr__这个魔术方法。

    __getitem__(self,key):返回键对应的值。

    __setitem__(self,key,value):设置给定键的值

    __delitem__(self,key):删除给定键对应的元素。

    __len__():返回元素的数量

    class PersonInfo:
    
        def __init__(self, name, age):
            print("调用__init__")
            self.name = name
            self.age = age
            self.one_dict = {}
    
        def __setitem__(self, key, value):
            print("调用__setitem__")
            try:
                self.one_dict[key] = value
            except:
                print("setitem有异常啊")
    
        def __getitem__(self, item):
            print("调用__getitem__")
            try:
                return self.one_dict[item]
            except:
                print("getitem有异常啊")
    
        def __len__(self):
            return len(self.one_dict) + 3
    
    
    one_person = PersonInfo("星星", 20)
    one_person["school"] = "振华中学"
    one_person["hobby"] = "学习"
    one_person["ablilty"] = "编程"
    print(one_person["school"])
    print(one_person[1])
    print(len(one_person))

    运行的结果:

    调用__init__
    调用__setitem__
    调用__setitem__
    调用__setitem__
    调用__getitem__
    振华中学
    调用__getitem__
    getitem有异常啊
    None
    6

     

  • 相关阅读:
    织梦后台如何安装
    Java JFrame实现无边框无标题
    SharePoint 2013的100个新功能之网站管理(一)
    cvFindContours之轮廓个数
    RequireJS 入门指南
    RESTFUL Service : based on Jersey
    hdu 1548 A strange lift(优先队列)
    SharePoint 用户配置文件服务
    SharePoint Foundation 搜索-PowerShell
    SharePoint 企业搜索-PowerShell
  • 原文地址:https://www.cnblogs.com/jszfy/p/11167420.html
Copyright © 2020-2023  润新知