python魔法方法

作者: FilesFan | 来源:发表于2019-07-12 08:25 被阅读6次

概述

python的魔法方法一般是指python内部定义的,以双下划线开头和结尾的类函数。他们可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一切都是自动发生的。

总览

魔法方法总览

常用的魔法方法

1.__new__方法
用来构造一个类的实例,第一个参数是cls。这个一般不经常使用。如它不返回,那么就不会创建实例了。它的用途在于创建单实例,也就是这个类只能创建一个实例对象。

class People(object):
    _flag = None
    def __new__(cls, *args, **kwargs):
        print('new type')
        if not cls._flag:
            cls._flag = super().__new__(cls)
        return cls._flag
    def __init__(self, name, age):
        print('init type')
        self.name = name
        self.age = age

aa = People('aa',12)
bb = People('bb',16)
print(aa.name)
print(bb.name)
#new type
#init type
#new type
#init type
#bb
#bb

2.__init__方法
它是初始化实例对象的方法,这也是我们最常用到的方法。一般都是初始化类属性的,这里就不多做介绍了。

3.__str__方法
当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据。__str__方法需要返回一个字符串,当做这个对象的描写。

class People(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
       return "%s's age is %s" %(self.name, self.age)
a = People('ken', 12)
print(a)
#ken's age is 12

4.__call__方法
对象可变成可调用对象,此对象可以像函数一样调用,例如:自定义函数,内置函数,类都是可调用对象,可用callable()判断是否是可调用对象

class People(object):
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __call__(self):
        print('name:%s  age:%d' % (self.name, self.age))

a = People('kellan', 12)
print(callable(a))
#True
a()
#name:kellan age:12

5.__getitem__方法
返回一个可迭代对象,可以切片

class People():
    def __init__(self):
        self.friend = ['people_1','people_2','people_3','people_4']
    def __getitem__(self, item):
        return self.friend[item]
a = People()
print(a[2])
#people_3
print(a[1:3])
#['people_2', 'people_3']
for i in a:
    print(i)

相关文章

网友评论

    本文标题:python魔法方法

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