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

面向对象中Attribute、Method、Property的区别及Patient类示例相关问题

面向对象核心概念区分及Property用法说明

一、三个概念的核心区别

  • Attribute(字段/普通属性):类或实例绑定的静态数据,直接存储值,访问时无额外执行逻辑,你标注的name、age、id都属于Attribute。
  • Method(方法):类中定义的可调用函数,对应类的行为逻辑,调用时必须加括号才能执行内部代码,你标注的get_details()、update_age()都属于Method。
  • Property(特性/受控属性):是介于Attribute和Method之间的封装结构,本质是把方法伪装成普通属性的访问形式,访问时不需要加括号,但后台会自动执行预设的读取、写入、删除逻辑,常用于数据校验、动态计算值、旧接口兼容等场景,你当前的代码中没有使用Property。

二、基于Patient类添加Property的示例

我们可以给Patient类加一个动态计算的is_adult(是否成年)Property,不需要额外存值,自动根据age字段判断,也可以自定义赋值逻辑:

class Patient:
    def __init__(self, name, age, patient_id):
        self.name = name
        self.age = age
        self.patient_id = patient_id

    # 用@property装饰器定义getter逻辑,访问时不需要加括号
    @property
    def is_adult(self):
        return self.age >= 18

    # 用@属性名.setter定义赋值时的逻辑,没有这个装饰器的话Property默认只读
    @is_adult.setter
    def is_adult(self, input_value):
        # 赋值时自动校验,避免逻辑冲突
        if input_value and self.age < 18:
            self.age = 18
        elif not input_value and self.age >= 18:
            self.age = 17

    def get_details(self):
        return f"患者编号{self.patient_id}:{self.name},年龄{self.age}"

    def update_age(self, new_age):
        if new_age > 0:
            self.age = new_age

使用示例:

# 实例化患者对象
p1 = Patient("李明", 17, "P2024001")
# 访问Property和访问普通Attribute写法完全一致
print(p1.is_adult) # 输出False,自动执行了age>=18的判断逻辑
# 给Property赋值,自动触发setter逻辑
p1.is_adult = True
print(p1.age) # 输出18,自动被调整为成年最低年龄

三、原代码Property说明

你提供的代码截图中目前没有定义任何Property,所有成员要么是存储静态数据的Attribute,要么是需要加括号调用的Method。

内容的提问来源于stack exchange,提问作者JoeDainton123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 13:06:03