python中的@property装饰器

1、@property 内置装饰器函数,把一个方法调用方式变成属性调用方式。(将一个方法当成一个属性使用)。注意@property装饰器只能在面向对象中使用。
2、访问使用@property装饰器装饰的函数可以直接调用函数名
(会执行一段功能(函数)然后返回值)
3、@property 装饰器只能修饰不带参数的方法。
4、@property装饰器修饰私有方法的getter和setter方法。和控制属性的访问权限-只读。

举例1:使用@property装饰器

from math import pi


class Circle:
    def __init__(self, r):
        self.r = r

    @property
    def perimeter(self):
        return 2 * pi * self.r

    @property
    def area(self):
        return pi * self.r ** 2


c1 = Circle(5)
print(c1.perimeter)
print(c1.area)

如上代码所示,如果不使用@property的话,那么print(c1.perimeter)就应该是print(c1.perimeter()),area同理。即,周长面积这种参数应该被当作变量来使用,而不是函数。

使用@property装饰器定义getter、setter、deleter 方法

class Person:
    def __init__(self, name, age):
        self.__name = name
        self.__age = age  # self.__age就是一个私有属性,对象就不能使用了

    @property
    def name(self):
        return self.__name

    @property
    def age(self, age):
        return self.__age

    # @property修饰的方法名称是xx,这里就@xx.setter
    # @age.setter是property的副产品
    @age.setter
    def age(self, age):
        if age < 0 and age > 150:
            print('不合法啊,superboy')
            return
        self.__age = age

    def __str__(self):
        msg = '姓名:{},年龄:{}'.format(self.__name, self.__age)
        return msg


per = Person('ZS', 10)
print(per)
per.age = 16
print(per)
print(per.name)

输出为:

姓名:ZS,年龄:10
姓名:ZS,年龄:16
ZS

猜你喜欢

转载自blog.csdn.net/weixin_44251004/article/details/86485442