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

 

 

posted on 2019-07-11 01:08  青柠锦鲤  阅读(321)  评论(0编辑  收藏  举报