目录
1、描述
@property 可以将一个方法的调用方式变成“属性调用”。
@property 主要用于帮助我们处理属性的读操作、写操作。
在Python中,我们可以使用
@property
和@<attribute_name>.setter
装饰器来实现getter和setter方法
2、使用@property实现getter方法
使用@property
装饰器可以将一个方法转换为只读属性。例如,如果我们有一个类Person
,它具有name
属性,我们可以定义一个getter方法来访问它:
- class Person:
- def __init__(self, name):
- self._name = name
-
- @property
- def name(self):
- return self._name
-
- p = Person("Alice")
- print(p.name) # 输出 "Alice"
在上面的示例中,@property
装饰器将name
方法转换为只读属性,它可以像访问类的属性一样访问name
方法。
3、使用@<attribute_name>.setter实现setter方法
使用@<attribute_name>.setter
装饰器可以将一个方法转换为可写属性的setter方法。例如,如果我们要为Person
类的name
属性定义一个setter方法,我们可以这样做:
- class Person:
- def __init__(self, name):
- self._name = name
-
- @property
- def name(self):
- return self._name
-
- @name.setter
- def name(self, value):
- self._name = value
-
- p = Person("Alice")
- print(p.name) # 输出 "Alice"
-
- p.name = "Bob"
- print(p.name) # 输出 "Bob"
在上面的示例中,@name.setter
装饰器定义了一个setter方法,它将给定的值分配给name
属性。注意,在定义setter方法时,方法名称必须与只读属性的名称相同,并且应该在定义getter方法之后。
4、使用getter和setter方法访问私有变量
Python没有真正的私有变量,但是我们可以使用以下约定将变量定义为私有变量:使用一个下划线_
将变量名称前缀。虽然这不会完全阻止从外部访问该变量,但是这是一种常用的约定,告诉其他程序员不应该直接访问该变量。
在这种情况下,我们可以使用getter和setter方法来访问这些变量。以下是一个使用getter和setter方法访问私有变量的示例:
- class Person:
- def __init__(self, name):
- self._name = name
-
- def get_name(self):
- return self._name
-
- def set_name(self, value):
- self._name = value
-
- p = Person("Alice")
- print(p.get_name()) # 输出 "Alice"
-
- p.set_name("Bob")
- print(p.get_name()) # 输出 "Bob"
在上面的示例中,我们定义了一个私有变量_name
,并使用get_name()
和set_name()
方法来访问它。请注意,getter和setter方法名称与私有变量名称不同,这是为了遵循Python的变量名称约定。