什么是getter与setter方法?二者分别具备什么作用?
getter 与 setter 方法详解
基本概念
getter和setter是面向对象编程中用于类属性管控的专用方法,主要用来替代直接读写类属性的操作,实现属性访问逻辑的封装,目前主流的面向对象编程语言(Java、Python、C#等)都支持这两类方法的定义与使用。
核心功能划分
getter 方法(读取器)
getter负责对外提供类内部属性的读取通道,核心功能包括:
- 封装私有属性的读取逻辑,避免外部直接访问类的内部私有属性,保障类的封装性
- 可在返回属性值前做自定义处理,比如对敏感数据做脱敏、对原始存储的格式做转换后再返回
- 可针对读取行为做权限校验,仅允许符合权限要求的调用方获取属性值
示例(Python语法):
class User: def __init__(self, id_card): self.__id_card = id_card # 双下划线开头为Python类的私有属性,外部无法直接访问 # getter方法定义 @property def id_card(self): # 身份证号读取时脱敏,仅返回前6位和后4位 return f"{self.__id_card[:6]}********{self.__id_card[-4:]}"
setter 方法(设置器)
setter负责管控类内部属性的修改逻辑,核心功能包括:
- 拦截外部对内部属性的修改操作,避免非法值写入导致类实例状态异常
- 可在属性赋值前做合法性校验,比如给年龄属性赋值时判断输入值是否在0~120的合理区间,不符合要求直接抛出错误或拒绝修改
- 可实现联动更新逻辑,比如修改用户的出生年月时,自动同步更新用户的年龄属性值
示例(接上述User类):
@id_card.setter def id_card(self, new_id_card): # 校验身份证号是否为18位合法格式 if len(new_id_card) != 18: raise ValueError("请输入18位合法身份证号") self.__id_card = new_id_card
典型使用优势
- 实现内部逻辑与外部调用的解耦:后续调整内部属性的存储方式时,只要保持getter、setter的对外调用规则不变,就不需要修改任何外部调用代码
- 提升数据可靠性:所有属性修改都经过统一校验,避免非法值流入导致的程序异常
- 灵活控制读写权限:如果只给某个属性定义getter、不定义setter,就可以实现该属性对外只读的效果
内容的提问来源于stack exchange,提问作者Moises Burelo
相关产品推荐
相关产品推荐

