Python类如何实现基于属性名字符串的通用setter方法
解决方案
Python内置了和getattr()对应的setattr()全局函数,刚好可以用来实现你要的通用setter功能,不需要为每个属性单独定义setter方法,也不需要硬编码属性赋值语句。
基础实现
直接修改setter方法即可,完整类代码如下:
class Employee: def __init__(self, name, age): self.name = name self.age = age self.address = "Somewhere" self.job = None def getter(self, name): return getattr(self, name, None) def setter(self, name, value): # 直接调用内置setattr方法完成赋值 setattr(self, name, value)
使用示例
# 初始化实例 employee1 = Employee("李四", 24) # 调用通用setter赋值 employee1.setter("age", 22) employee1.setter("address", "北京市朝阳区") employee1.setter("job", "产品经理") # 调用getter验证结果 print(employee1.getter("age")) # 输出 22 print(employee1.getter("address")) # 输出 北京市朝阳区 print(employee1.getter("job")) # 输出 产品经理
进阶:添加属性校验
如果需要对部分属性的赋值做合法性校验,只需要在setter方法里增加对应逻辑即可,不需要修改其他代码:
def setter(self, name, value): # 针对特定属性增加自定义校验规则 match name: case "age": if not isinstance(value, int) or not (16 <= value <= 65): raise ValueError("年龄必须是16到65之间的整数") case "name": if not isinstance(value, str) or len(value.strip()) == 0: raise ValueError("姓名不能为空") # 校验通过后再赋值 setattr(self, name, value)
内容的提问来源于stack exchange,提问作者GrantWard101
相关产品推荐
相关产品推荐

