大锤python日记(property属性的两种实现方式)

33 阅读1分钟
  1. 使用装饰器

使用装饰器来定义一个函数,将其转换为属性。通过在方法上使用@property装饰器,可以将这个方法转换为只读属性。使用@<name>.setter装饰器可以定义setter方法,将其转换为可写或者可读可写属性。

class Person:
    def __init__(self, name):
        self._name = name

    # 使用@property装饰器将方法转换为只读属性
    @property
    def name(self):
        return self._name.title()

    # 使用@<name>.setter装饰器定义setter方法,将其转换为可写或者可读可写属性。
    @name.setter
    def name(self, value):
        self._name = value.strip()


person = Person(' john ')
print(person.name)  # 输出 'John'
person.name = ' mike '
print(person.name)  # 输出 'Mike'
  1. 使用经典属性访问器

另一种实现property属性的方式是使用经典属性访问器。这种方式需要手动定义getter和setter方法,并将它们传递给property函数来创建属性。

class Person:
    def __init__(self, name):
        self._name = name

    # 定义getter方法
    def get_name(self):
        return self._name.title()

    # 定义setter方法
    def set_name(self, value):
        self._name = value.strip()

    # 使用property函数创建属性
    name = property(get_name, set_name)

person = Person(' john ')
print(person.name)  # 输出 'John'
person.name = ' mike '
print(person.name)  # 输出 'Mike'

无论哪种方式,都可以达到实现property属性的目的,但使用装饰器的方式更加简洁明了,同时还支持只读属性、可写属性和可读可写属性的定义。