python基础常用的魔法函数

1.__init__():

    类中的初始化函数,可以显式显示即子调用类的时候以进行了函数的初始化。

   通过vars函数获知显示声明的属性,但是隐式的就无法获知了,

2.__str__():

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

函数返回一定是Str类型,当print(test())中test中的__str__函数返回的是非str类型,就会报错。

class test:
    def __init__(self):
        self.a=1
        self.b=2
    def __str__(self):
        return 'happy everyday'
print(test().__str__())
print(test())

3.__new__():

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

 

python定义类时,class()与class(object)的区别

在python2中,class(object)定义时,class继承了object()的属性;

在python3中,class()默认继承了object();

class test_obj():
    def __init__(self):
        print('another obj')
        self.a=3
        self.b=4
    def __str__(self):
        return 'hello'
class test():
    def __init__(self):
        self.a=1
        print('---init---')
        self.b=2
    def __str__(self):
        return 'hello'
    def __new__(new_obj,*args,**kwargs):
        print("create a new obj")
        test_obj_new = test_obj()
        return test_obj_new
    


test().a

是先进行了__new__()方法在对实例进行初始化操作。

因此可以这么描述__new__()和__ini__()的区别,在新式类中__new__()才是真正的实例化方法,为类提供外壳制造出实例框架,然后调用该框架内的构造方法__init__()使其丰满。

4.__unicode__():

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

python3 只保留了__str__()的方法,具体作用基本相同,同是对一个对象进行美化输出。

 

5.__call__():

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

class test():
    def __init__(self):
        self.a=1
        print('---init---')
        self.b=2
    def __call__(self,x,y):
        return x**y
print(test()(4,3))

6、__len__():

返回值需为int类型,平常len调用后就会调用该函数。可定制输出

7.__repr__():

repr() 转化为供解释器读取的形式,某对象没有适于人阅读的解释形式的话,str() 会返回与repr(),所以print展示的都是str的格式。

8.__setattr__():

可以设置函数属性,添加函数属性的规则。

def test():

    def __setarr__(self,x,y):
        if y >0:
            object.__setarr__(self,x,True)
        else:
            object.__setarr__(self,x,False)
    

该函数可以设置特定规则。

9.__getattr__():

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

参考资料:https://www.cnblogs.com/small-office/p/9337297.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值