当前位置: 首页> 教育> 大学 > Python 面向对象编程——getter/setter

Python 面向对象编程——getter/setter

时间:2025/8/22 15:07:01来源:https://blog.csdn.net/youhebuke225/article/details/141394123 浏览次数:0次

在Python中,getter和setter是两种特殊的方法,用于访问(获取)和修改(设置)对象的属性。虽然Python是一种动态语言,允许你直接访问和修改对象的属性,但使用getter和setter方法可以提供更好的封装性和控制。

封装与Getter和Setter

封装是面向对象编程(OOP)中的一个核心概念,它指的是将数据(属性)和操作这些数据的方法(函数)组合在一起,形成一个独立的单元(即类)。通过封装,类的内部实现细节被隐藏起来,只通过公开的接口(如方法)与外部进行交互。Getter和Setter就是这些公开接口的一部分,它们分别用于获取和设置类的私有或受保护属性。

Python中的Getter和Setter

在Python中,没有像Java或C#那样的内置语言支持来强制要求使用getter和setter方法。但是,你可以通过定义以特定命名约定命名的方法来模拟这种行为。通常,getter方法以get_为前缀,后跟属性名(首字母大写),而setter方法以set_为前缀,后跟属性名(首字母大写),并且接受一个参数来指定新值。

然而,Python社区更倾向于使用@property装饰器来定义getter和setter,这样可以使属性的访问和修改看起来更像是直接操作属性,而不是调用方法。

使用@property装饰器

class Person:def __init__(self, name, age):self._name = name  # 使用单下划线作为命名约定表示受保护的属性self._age = age@propertydef name(self):# Getter方法return self._name@name.setterdef name(self, value):# Setter方法if not isinstance(value, str):raise ValueError("Name must be a string")self._name = value@propertydef age(self):# Getter方法return self._age@age.setterdef age(self, value):# Setter方法,可以添加更多的验证逻辑if not isinstance(value, int) or value < 0:raise ValueError("Age must be a non-negative integer")self._age = value# 使用Person类
p = Person("Alice", 30)
print(p.name)  # 调用getter方法
p.name = "Bob"  # 调用setter方法
print(p.age)
p.age = 25

在这个例子中,_name_age是私有属性(尽管在Python中它们实际上是受保护的,因为Python没有真正的私有属性),而nameage是通过@property装饰器定义的getter和setter方法。这样,当你像访问或修改属性一样访问或修改nameage时,实际上是在调用这些方法。这提供了更好的封装性和控制,允许你在属性被访问或修改时执行额外的逻辑(如验证)。

关键字:Python 面向对象编程——getter/setter

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: