一、简介

负责把一个方法当做属性进行使用,这样做可以简化代码使用。

访问器和修改器也是装饰器的一种。

@property: 访问器,getter,简化方法的调用。
@获取值的函数名.setter: 修改器,setter,对于重要字段做一些校验。
访问器和修改器的根本目的是想将属性私有化,提供getter&setter去访问。

访问器和修改器能够做到访问属性其实在调用getter方法,设置属性其实在调用setter方法。
Java的规范都是不直接操作属性,而是调用getter和setter方法。
Python做到了直接操作属性来间接调用getter&setter。

二、示例

使用了访问器和修改器后一般方法名都写为属性名。

class Person:

    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        print('@property name')
        return self._name

    @name.setter
    def name(self, name):
        print('@name.setter')
        self._name = name

    @property
    def age(self):
        print('@property age')
        return self._age

    @age.setter
    def age(self, age):
        print('@age.setter')
        self._age = age

    def show(self):
        print(f'{self._name} {self._age}')
if __name__ == '__main__':
    person = Person('张三', 30)
    # @property name
    # 张三
    print(person.name)
    # @property age
    # 30
    print(person.age)
    # 张三 30
    person.show()

    # @name.setter
    person.name = '张三丰'
    # @age.setter
    person.age = 35
    # 张三丰 35
    person.show()

三、类属性方式

property属性 = property(获取值方法,设置值方法)

class Persondef __init__(self):
		self.__age = 18

	def get_age(self):
		return self.__age

	def set_age(self, age):
		self.__age = age

	age = property(get_age, set_age)


p = Person()
p.age = 20
print(p.age)
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐