zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    第04组(64) 需求分析报告
    第04组(64) 团队展示
    结对编程作业
    Python单元测试框架 Unittest 的简单使用方法
    第一次个人编程作业
    第09组 Alpha冲刺 总结
    Swagger 工具集
    第09组 Alpha冲刺(6/6)
    第09组 Alpha冲刺(5/6)
    第09组 Alpha冲刺(4/6)
  • 原文地址:https://www.cnblogs.com/jszfy/p/11167420.html
Copyright © 2011-2022 走看看