装饰器property

装饰器功能

  • 装饰器高价函数参数或者返回值为函数
  • 装饰器用的闭包的功能
  • 装饰器避免入侵式代码增强函数功能
  • 需要带参数时需要进行柯里化

@property介绍

@property功能

主要功能:将方法装饰为属性一样使用,对象调用方法时,需要带(),对象调用属性时,直接使用属性名,因为方法本身就是函数,调用时必须用()

  • 将一个类方法经过property装饰器函数装饰后,这个类方法当类对象属性使用
  • 同时伴随着生成一个同名的name.setter装饰器,此装饰器是用来装饰新方法,对属性的修改
  • @property 装饰的方法, @name.sette 装饰同一个方法名的方法

@类名.setter

  • 如果一个属性方法被property装饰后,若再无.setter装饰此方法时,这个属性就变为只读属性
  • .setter装饰后,就可以根据装饰器函数的要求进行更改控制其属性

简单案例

  • propterty装饰操作自身属性的方法
  • propterty装饰操作与自身属性无关的方法
  • property装饰后,可以将属性变为只读属性
class Testcode:
    """no doc"""
    def __init__(self,name):
        self.name = name
        self.__age = 12

    #装饰方法,方法操作已有的属性
    @property  #通过装饰器将方法装饰为属性使用
    def age(self):
        return self.__age

    # 由上装饰器生成age.setter装饰器,二者方法名的一致
    @age.setter 
    def age(self,ae):
        self.__age = ae

    #装饰器仅仅将普通方法装饰为属性一样使用
    @property
    def printage(self):
        print(self.__age)

    def pi(self):
        print(self.name)

Tom = Testcode("Tom bule")

#用装饰后的方法,当属性一样操作,但不会操作自身隐藏属性
Tom.age = 18
#装饰后的方法,使用时好像使用对象属性一样,不需要带()
Tom.printage
#普通方法,调用时使用()
Tom.pi()

猜你喜欢

转载自blog.csdn.net/xuexiaoyaani/article/details/80249404
今日推荐