遍历列表中的对象后通过self访问对应变量时无法正常取值如何解决
问题根因
你的写法存在两个核心错误:
var_list = [account, user, authenticator, database, schema, warehouse, role]存储的是这些变量的当前实际值,而非变量名本身,遍历时无法获取到对应的属性名字符串self.var是固定访问self下名为var的属性,不会动态替换为遍历项的内容,因此永远无法命中你要的目标属性
可行解决思路
方法1:属性名存为字符串,用
getattr动态取值
适合属性数量多的场景,后续新增属性只要修改列表即可:# 列表内存储属性的名字符串 var_name_list = ["account", "user", "authenticator", "database", "schema", "warehouse", "role"] var_result = {} for var_name in var_name_list: # 先取当前作用域下的变量值 current_var = locals().get(var_name) if current_var is None: # 动态取self的对应属性 var_result[var_name] = getattr(self, var_name) else: var_result[var_name] = current_var # 后续可以从var_result里取各个变量的值,需要直接赋值给变量的话可以用globals()[var_name] = xxx(不推荐修改全局变量)小提示:Python中判断空值推荐用
is None替代== None,避免部分自定义对象重写__eq__方法导致判断异常。方法2:单变量显式赋值
适合属性数量少的场景,可读性更高:account = account if account is not None else self.account user = user if user is not None else self.user authenticator = authenticator if authenticator is not None else self.authenticator database = database if database is not None else self.database schema = schema if schema is not None else self.schema warehouse = warehouse if warehouse is not None else self.warehouse role = role if role is not None else self.role
内容的提问来源于stack exchange,提问作者mikelowry
相关产品推荐
相关产品推荐

