面向对象中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
相关产品推荐
相关产品推荐

