在 Python
中,setter
和 getter
是用来控制属性访问的方法。setter
方法用于设置属性的值,getter
方法用于获取属性的值。使用 setter
和 getter
方法可以控制属性的访问权限和格式。
为了方便使用setter
和 getter
方法,Python
提供了一个语法糖,称为 @property
。使用 @property
可以将一个方法转换为属性,从而使该属性可以像普通属性一样访问,同时也可以使用 setter
方法来设置属性的值。
下面是一个示例:
class Person:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, value):
if not isinstance(value, str):
raise ValueError('Name must be a string')
self._name = value
在上面的代码中,我们定义了一个 Person
类,该类包含一个名为 name
的属性。使用 @property
将 name
方法转换为属性,从而使该属性可以像普通属性一样访问。同时,使用 @name.setter
装饰器定义了一个setter
方法,用于设置 name
属性的值。在 setter
方法中,我们对属性值进行了类型检查,如果属性值不是字符串类型,则抛出一个 ValueError
异常。
现在,我们可以使用以下代码来访问 name
属性:
p = Person('Alice')
print(p.name) # 输出 'Alice'
p.name = 'Bob'
print(p.name) # 输出 'Bob'
p.name = 123 # 抛出 ValueError 异常
可以看到,我们可以像访问普通属性一样访问 name
属性,并且可以使用 setter
方法来设置属性的值。如果设置的值不是字符串类型,则会抛出一个异常。这样,我们就可以控制属性的访问权限和格式。