- 使用装饰器
使用装饰器来定义一个函数,将其转换为属性。通过在方法上使用@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'
- 使用经典属性访问器
另一种实现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
属性的目的,但使用装饰器的方式更加简洁明了,同时还支持只读属性、可写属性和可读可写属性的定义。