Python自定义Analyzer类新实例保留旧实例reviews旧数据问题
问题原因
你遇到的是Python类属性和实例属性的混用问题,核心原因有两点:
- 直接在
Analyzer类定义下声明的dataframe和reviews是类属性,所有实例共享同一份内存。reviews是可变的列表类型,任意实例对它的修改都会同步到所有其他实例,这就是旧数据残留的核心原因。 - 你当前
__init__方法里的reviews = self.dataframe['Reviews'].tolist()是创建了局部变量,根本没有绑定到实例上,你实际运行的代码应该是直接操作了类共享的reviews属性,才会出现不同品牌的数据累加的情况。
另外你代码里的del analysis不会清理类属性,只是删除了实例的引用,类属性本身还是保留在Analyzer类的内存空间中,下次实例化还是会复用之前的列表。
修复方案
所有实例独有的属性统一放到__init__方法中初始化,不要在类定义层声明可变类型的属性:
import pandas as pd class Analyzer: def __init__(self, brand): # 所有实例专属属性在初始化时定义,每个实例都会创建新的独立对象 self.dataframe = pd.read_csv(brand) self.reviews = self.dataframe['Reviews'].tolist() def analyze(self): # 后续逻辑直接操作self.reviews即可,不同实例之间完全隔离 # 你的分析代码...
修改后再运行主逻辑,每个品牌的reviews就会是对应CSV文件里的实际条数,不会出现累加问题。
内容的提问来源于stack exchange,提问作者Matin Amani
相关产品推荐
相关产品推荐

