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

     

  • 相关阅读:
    微信二维码 场景二维码 用于推送事件,关注等 注册用户 ,经过测试
    简单的 Helper 封装 -- CookieHelper
    简单的 Helper 封装 -- SecurityHelper 安全助手:封装加密算法(MD5、SHA、HMAC、DES、RSA)
    Java反射机制
    Windows Azure Web Site (13) Azure Web Site备份
    Windows Azure Virtual Machine (1) IaaS用户手册
    Windows Azure Web Site (1) 用户手册
    Windows Azure Web Site (12) Azure Web Site配置文件
    Windows Azure Web Site (11) 使用源代码管理器管理Azure Web Site
    Windows Azure Web Site (10) Web Site测试环境
  • 原文地址:https://www.cnblogs.com/jszfy/p/11167420.html
Copyright © 2011-2022 走看看