美高梅集团4688Python基础(拾) __init__与__new__差异

__init__www.4688com,与__new__区别:

聊起装饰器,就只可以说python自带的三个装饰器:

__美高梅手机版登录,美高梅集团4688,init__在python,其实是,在实例化之后执行的,用来初步化1些特性,约等于构造函数,不过又不平等

一、@property  
将某函数,做为属性使用

周全一些,通过参数会持有察觉,其实__init__(self)
 self隐式的将,实例传过来。

 @property 修饰,便是将艺术,变成3天个性来利用。

 

class A():


    @property
    def pfunc(self):
        return self.value

    @pfunc.setter
    def pfunc(self,value):
        self.value = value

    @property
    def pfunc1(self):
        print('this is property')

if __name__=="__main__":

    A.pfunc = 9
    print A.pfunc
    A.pfunc1

__new__在python中实际是,在实例化在此之前实施的,这一个通过参数壹样能够看看

 

__new__(cls),cls是隐式的传递的类对象,并不是实例。因为__new__的义务就是,创造类实例并回到实例。

二、@classmethod
 修饰类的章程

class temp(object):

    def __init__(self,txt):
        self.txt = txt
        print '__init__'


    def __new__(cls,txt):
        print '__new__'
        print txt
        return super(temp,cls).__new__(cls)

temp('what?')

带修饰类方法:cls做为方法的率先个参数,隐式的将类做为对象,传递给艺术,调用时不用实例化。

结果:

普普通通函数方法:self做为第贰个参数,隐式的将类实例传递给艺术,调用方法时,类必须实例化。

C:\Python27\python.exe D:/weixin/temp/abc.py
__new__
what?
__init__

Process finished with exit code 0
class A():
    def func(self,x,y):
        return x * y

    @classmethod
    def cfunc(cls,x,y):
        return x * y

if __name__=="__main__":
    print A().func(5,5)
    print A.cfunc(4,5)

 

 

 

三、@staticmethod
 修饰类的不二秘诀

相关文章