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
解决方案
更规范的形式是:
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
您也可以直接df
从 中访问,而class
无需创建实例:
>>> my_module.DataSet.df
推荐阅读
- javascript - 有没有办法在另一个项目中使用 web-pack 捆绑文件中的对象和类?
- laravel - laravel jetstream 修改 RegisteredUserController
- javascript - LocalStorage 输出错误
- java - 如何在 JAVA 中从一种方法访问对象数组到另一种方法?
- python - id() 函数在 python 中给出不同的结果
- sql - 集成 2 种搜索方法和聚合结果
- android - 颤振的搜索按钮
- android - Firebase 电话身份验证 Android 错误
- python - K Medoids 聚类,对质心值进行四舍五入
- javascript - 内容脚本只运行一次(临时插件)