专题11:谈谈python中的“魔法函数“

python中常用的魔法函数

      • __init()__
      • __str__()
      • __new()__
      • __unicode__()
      • __call__()
      • __len__()
      • __repr__()
      • __setattr__()
      • __getattr__()
      • __setitem__()
      • __getitem__()
      • __delattr__()
      • __delitem__()
      • __iter__()
      • __del__()

init()

所有类的超类object,默认包含__init__()实现,这个函数会在对象初始化的时候调用,我们可以选择实现,也可以选择不实现,一般建议是实现的,不实现对象属性就不会被初始化,虽然我们仍然可以对其进行赋值,但是它已经成了隐式的了

class Test():
	def __init__(self, name):
		self.name = name
t = Test("11")
t.name

str()

直接打印对象的实现方法,__str__是被print函数调用的,一般都是return一个什么东西,这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换,我们可以直接print的对象都是实现了__str__这个方法的

class Test():
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return self.name

print(Test("11"))

new()

在object类中存在一个静态的__new__(cls, *args, **kwargs)方法,该方法需要传递一个参数cls,cls表示需要实例化的类,此参数在实例化时由Python解释器自动提供,__new__方法必须有返回值,且返回的是被实例化的实例,只有在该实例返回后才会调用__init__来进行初始化,初始化所用的实例就是__new__返回的结果,也就可以认为是self

class Test(object):
    def __init__(self):
        print("__init__")
        self.name = 111

    def __new__(cls, *args, **kwargs):
        print(cls)
        return object.__new__(cls, *args, **kwargs)

    def __str__(self):
        return str(self.name)


t = Test()
print(t)

注意

__init__() __new__(比较)
1.用法不同
new__用于创建实例,在创建实例之前进行调用,是类级别的方法,属于静态方法
init__用户初始化实例 在实例对象创建之后调用,初始化实例对象的属性值
2.传参不同
new()至少有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
init()至少有一个参数self,就是这个__new
()返回的实例,init()在__new
()的基础上完成一些初始化的操作
3.返回值不同
new 必须有返回值 返回实例对象
init 没有返回值

unicode()

unicode()方法是在一个对象上调用unicode()时被调用的。因为Django的数据库后端会返回Unicode字符串给model属性,所以我们通常会给自己的model写一个__unicode__()方法。如果定义了__unicode__()方法但是没有定义__str__()方法,Django会自动提供一个__str__()方法调用 unicode()方法,然后把结果转换为UTF-8编码的字符串对象,所以在一般情况下,只定义__unicode__()方法,让 Django来处理字符串对象的转换

class Test(object):
    def __init__(self):
        self.name = "李四"

    def __unicode__(self):
        return str(self.name)


t = Test()
print(t.name)

call()

对象通过提供__call__()方法可以模拟函数的行为,如果一个对象提供了该方法,就可以像函数一样使用它

class Test(object):
    def __init__(self):
        self.name = "李四"

    def __call__(self, x):
        return x + 1


t = Test()
print(t(11))

len()

len调用后会调用对象的__len__函数

repr()

函数str() 用于将值转化为适于人阅读的形式,而repr() 转化为供解释器读取的形式,所以print展示的都是str的格式

class Test(object):
    def __init__(self):
        self.name = "李四"

    def __repr__(self):
        return self.name


t = Test()
print(t)

setattr()

设置函数的属性

getattr()

获取对象属性,只有在属性没有找到的时候调用

setitem()

该函数可以给对象赋值,我们可以以下标的方式对其进行操作

getitem()

与上函数相反,__getitem__可以使对象支持已下标的方式获取值

delattr()

本函数的作用是删除属性,实现了该函数的类可以用del 命令来删除属性

delitem()

该函数支持以下标方式删除对象数据

iter()

只要定义了__iter__()方法对象,就可以使用迭代器访问

del()

一个析构器,或者回收器,在对象引用数降到0时执行,有时可能还需要等一会再执行,所以一般不推荐使用,但是在代码中我们偶尔可以用它来实现一些必须要做的,但是并不紧急的事

推荐文章:Python中的魔法函数总结整理

参考文章 点击查看

你可能感兴趣的:(#,python专题汇总,python,魔法函数)