如何实现接收对象变量名并返回对应属性值之和的函数?
解决动态获取对象属性求和的问题
嘿,我来帮你搞定这个需求!首先咱们先梳理下你原代码里的问题,然后给出正确的实现方式。
原代码的核心问题
你想通过传入字符串形式的属性名来求和,但直接用obj.x是行不通的——这里的x是字符串,不是对象的直接属性,得用Python的getattr()函数来动态获取属性值才行。另外你也注意到了最后一行的笔误,得用实例f而非类foo,参数也得对应成'w'和'z'。
正确实现方式
下面两种写法都能满足你的需求:
方式一:普通函数
这种写法比较灵活,能给任意对象计算指定属性的和:
class foo: def __init__(self): self.w = 5 self.z = 10 def sum_attributes(obj, attr_name1, attr_name2): # 用getattr根据字符串属性名获取对应值 val1 = getattr(obj, attr_name1) val2 = getattr(obj, attr_name2) return val1 + val2 f = foo() print(sum_attributes(f, 'w', 'z')) # 输出:15
方式二:类的实例方法
如果这个求和逻辑只属于foo类的实例,也可以把它写成类的方法:
class foo: def __init__(self): self.w = 5 self.z = 10 def sum_attributes(self, attr_name1, attr_name2): return getattr(self, attr_name1) + getattr(self, attr_name2) f = foo() print(f.sum_attributes('w', 'z')) # 输出:15
额外小提示
如果担心传入的属性名不存在会报错,可以给getattr加个默认值参数,比如:
getattr(obj, attr_name1, 0) # 属性不存在时返回0,避免AttributeError
内容的提问来源于stack exchange,提问作者user8215383
相关产品推荐
相关产品推荐

