访问要在类中使用的变量时出现问题

2024-04-19 13:05:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我正在构建的python类动态设置一个资源文件。我解决这个问题的想法是,首先将变量设置为None,然后使用模块级函数赋值。我的模块看起来像:

# my_module

df = None

def set_data(fp, sheet_name, index_col=[0, 1]):
    # what I really want to do:
    df = pd.read_excel(rf'{fp}', index_col=index_col)

    # minimal example:
    df = 'Foo'

class DataSet():
    def __init__(self):
        self.df = df

这是我测试的结果。我错过了什么

>>> import my_module
>>> my_module.df == None
True
>>> my_module.set_data('file.xlsx', 'sheet_1')
>>> my_module.df == None
True
>>> my_module.df == 'Foo'
False

Tags: 模块selfnonetruedfdataindexfoo
1条回答
网友
1楼 · 发布于 2024-04-19 13:05:18

更规范的形式是:

def set_data(fp, sheet_name, index_col=[0, 1]):
    # what I really want to do:
    return pd.read_excel(rf'{fp}', index_col=index_col)

class DataSet():
    def __init__(self, fp, sheet_name, index_col=[0, 1]):
        self.df = set_data(fp, sheet_name, index_col)

然后您只需创建DataSet(),例如:

>>> dataset = my_module.DataSet('file.xlsx', 'sheet_1')
>>> dataset.df

作为类变量:

class DataSet():
    df = None

    @classmethod
    def set_data(cls, fp, sheet_name, index_col=[0, 1]):
        cls.df = pd.read_excel(rf'{fp}', index_col=index_col)

用途:

>>> my_module.DataSet.set_data('file.xlsx', 'sheet_1')
>>> dataset = my_module.DataSet()
>>> dataset.df

也可以直接从class访问df,而无需创建实例:

>>> my_module.DataSet.df

相关问题 更多 >