You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

什么是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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 14:36:00