快捷搜索:
来自 计算机编程 2019-06-15 15:45 的文章
当前位置: 67677新澳门手机版 > 计算机编程 > 正文

【67677新澳门手机版】python自带的四个装饰器

__init__与__new__区别:

说到装饰器,就不得不说python自带的三个装饰器:

__init__在python,其实是,在实例化之后执行的,用来初始化一些属性,相当于构造函数,但是又不一样

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

细心一些,通过参数会有所发现,其实__init__(self)  self隐式的将,实例传过来。

 @property 修饰,就是将方法,变成一个属性来使用。

 

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__的任务就是,创建类实例并返回实例。

2、@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:Python27python.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)

 

 

 

3、@staticmethod  修饰类的方式

本文由67677新澳门手机版发布于计算机编程,转载请注明出处:【67677新澳门手机版】python自带的四个装饰器

关键词: