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

Python中如何通过类实例属性动态访问模块中的指定列表?

Python中如何通过类实例属性动态访问模块中的指定列表?

首先,你遇到的核心问题是动态访问模块中的变量——Python不支持db.{self.listname}这种字符串插值式的属性访问语法,得用getattr()函数来实现这个需求。另外,你原来的清理逻辑把元组转成字符串再处理,会破坏原有的数据结构,咱们一起把这两个问题都解决掉。

问题分析

  1. 动态属性访问错误:db.{self.listname}是无效语法,Python无法识别这种写法。要根据字符串名称获取模块里的变量,必须用getattr()函数。
  2. 数据结构破坏:你把元组转成逗号分隔的字符串处理,最后返回的是字符串列表,而不是保持原有的元组列表结构,这会导致后续使用数据时很麻烦。
  3. 变量名冲突:用list作为变量名会覆盖Python内置的list类型,这是不好的编程习惯,要避免。

修正后的代码

下面是调整后的CleaningTool类,既解决了动态访问模块列表的问题,又保留了原数据结构,同时完成清理需求:

import re
import database as db

class CleaningTool:
    def __init__(self, listname):
        self.listname = listname

    def clean(self):
        # 动态获取database模块中指定名称的列表
        target_list = getattr(db, self.listname)
        cleaned_list = []
        
        for item in target_list:
            cleaned_elements = []
            for element in item:
                # 第一步:转成小写
                lower_element = element.lower()
                # 第二步:去掉括号里的年份(正则匹配" (四位数字)"的格式,更精准)
                no_date_element = re.sub(r' \(\d{4}\)', '', lower_element)
                cleaned_elements.append(no_date_element)
            # 把处理后的元素转回元组,保持原数据结构
            cleaned_list.append(tuple(cleaned_elements))
        
        return cleaned_list

代码解释

  1. 动态访问模块列表:getattr(db, self.listname)是关键——它接收模块对象和属性名称字符串,返回模块中对应名称的变量(这里就是你要清理的列表)。比如传入"films",就会返回db.films列表。
  2. 保留原数据结构:遍历每个元组,逐个处理里面的字符串元素,最后把处理后的元素重新组合成元组,这样返回的结果和原列表结构一致,方便后续使用。
  3. 精准清理日期:把正则表达式改成r' \(\d{4}\)',只匹配括号里的四位数字(也就是年份),避免误删电影名称中可能存在的其他括号内容。
  4. 兼容单元素元组:比如friends列表里的("Lucie",),遍历的时候会正常处理这个单元素,不会报错。

测试使用

你可以这样调用这个工具,不管是清理films还是后续新增的列表,都能直接使用:

# 清理films列表
film_cleaner = CleaningTool("films")
cleaned_films = film_cleaner.clean()
print(cleaned_films)

# 清理friends列表
friend_cleaner = CleaningTool("friends")
cleaned_friends = friend_cleaner.clean()
print(cleaned_friends)

运行后,cleaned_films里的电影名会变成小写且去掉年份,介质格式也统一为小写;cleaned_friends里的人名和电影名也会按规则处理,同时保留原有的元组结构。

备注:内容来源于stack exchange,提问作者Grégory Perney

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 11:50:32