python中的Getter 和 Setter

目录

1、描述

2、使用@property实现getter方法

3、使用@.setter实现setter方法

4、使用getter和setter方法访问私有变量


1、描述

@property 可以将一个方法的调用方式变成“属性调用”。
@property 主要用于帮助我们处理属性的读操作、写操作。

在Python中,我们可以使用@property@<attribute_name>.setter装饰器来实现gettersetter方法

2、使用@property实现getter方

        使用@property装饰器可以将一个方法转换为只读属性。例如,如果我们有一个类Person,它具有name属性,我们可以定义一个getter方法来访问它:

  1. class Person:
  2. def __init__(self, name):
  3. self._name = name
  4. @property
  5. def name(self):
  6. return self._name
  7. p = Person("Alice")
  8. print(p.name) # 输出 "Alice"

        在上面的示例中,@property装饰器将name方法转换为只读属性,它可以像访问类的属性一样访问name方法

3、使用@<attribute_name>.setter实现setter方法

使用@<attribute_name>.setter装饰器可以将一个方法转换为可写属性的setter方法。例如,如果我们要为Person类的name属性定义一个setter方法,我们可以这样做:

  1. class Person:
  2. def __init__(self, name):
  3. self._name = name
  4. @property
  5. def name(self):
  6. return self._name
  7. @name.setter
  8. def name(self, value):
  9. self._name = value
  10. p = Person("Alice")
  11. print(p.name) # 输出 "Alice"
  12. p.name = "Bob"
  13. print(p.name) # 输出 "Bob"

在上面的示例中,@name.setter装饰器定义了一个setter方法,它将给定的值分配给name属性。注意,在定义setter方法时,方法名称必须与只读属性的名称相同,并且应该在定义getter方法之后

4、使用getter和setter方法访问私有变量

        Python没有真正的私有变量,但是我们可以使用以下约定将变量定义为私有变量使用一个下划线_将变量名称前缀。虽然这不会完全阻止从外部访问该变量,但是这是一种常用的约定,告诉其他程序员不应该直接访问该变量。

        在这种情况下,我们可以使用getter和setter方法来访问这些变量。以下是一个使用getter和setter方法访问私有变量的示例:

        私有属性“_“下划线和“__“双下划线的区别

  1. class Person:
  2. def __init__(self, name):
  3. self._name = name
  4. def get_name(self):
  5. return self._name
  6. def set_name(self, value):
  7. self._name = value
  8. p = Person("Alice")
  9. print(p.get_name()) # 输出 "Alice"
  10. p.set_name("Bob")
  11. print(p.get_name()) # 输出 "Bob"

        在上面的示例中,我们定义了一个私有变量_name,并使用get_name()set_name()方法来访问它。请注意,getter和setter方法名称与私有变量名称不同,这是为了遵循Python的变量名称约定。

posted @ 2023-10-25 17:42  Python喵  阅读(553)  评论(0编辑  收藏  举报