概述
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)
网友评论