【问题标题】:Initialize an Python instance using an existing method from another class使用来自另一个类的现有方法初始化 Python 实例
【发布时间】:2015-06-15 20:03:19
【问题描述】:

我有兴趣准备一个可以从另一个类继承属性的类对象。但是,初始化应该使用另一个类的现有方法来完成。可以试试:

import pandas as pd

class Data():
    def __init__(self, file):
        self.df = pd.read_csv(file)

if __name__ = "__main__":
    abc = Data("xyz.csv")

通过这种方式,实例'abc.df'将是一个DataFrame实例,它使用pandas.read_csv()方法初始化,读取“xyz.csv”文件。我想知道如何实现初始化,使得 'abc' 本身将是 DataFrame 实例而不是 'abc.df'?应该是这样的

import pandas as pd

class Data():
    def __init__(self, file):
        self = pd.read_csv(file) # self has all the attributes of a DataFrame instance

if __name__ = "__main__":
    abc = Data("xyz.csv")

当然,这行不通。

编辑:我在How to subclass Pandas.DataFrame 上找到了相关讨论。但是,我仍然很好奇是否有一种方法可以通过使用另一个实例的现有方法来创建一个实例。

【问题讨论】:

  • def data(file): return pd.read_csv(file)...!?
  • 为什么需要编写这样的类,而不是调用read_csv 并使用结果?
  • deceze,BrenBarn:这样做的目的不仅限于 pandas。我的意图是初始化一个实例,该实例具有现有实例的所有属性和方法。最重要的是,如果需要,我可以为其他目的添加其他属性和方法。
  • deceze:声明一个单独的函数如何帮助初始化满足上述要求的实例?

标签: python initialization


【解决方案1】:

您可以从pandas.DataFrame 继承Data,并在构造函数中使用from_csv 来读取csv 数据(未验证):

import pandas as pd

class Data(pd.DataFrame):
    def __init__(self, file):
         super(Data, self).__init__()
         self.from_csv(file)

if __name__ = "__main__":
abc = Data("xyz.csv")

【讨论】:

  • 感谢您的建议。当我尝试从 'pandas.DataFrame' 子类化 'Data' 时,我可能做错了
  • 我尝试在__init__(self, file) 中使用super().from_csv(file)。如果我通过abc = Data("xyz.csv") 创建实例,该程序不会抱怨但是,它会出现问题 RuntimeError: maximum recursion depth exceeded when I try to print abc.shape 此外,from_csv 与@987654333 相比,行为略有不同@。参考这个stackoverflow.com/questions/26495408/…>。
  • 很遗憾,更新后的答案不起作用,因此我们无法以这种方式访问​​ print(abc.shape) 或 print(abc.columns) 等属性。
  • 已更新,另请参阅 stackoverflow.com/questions/13229750/… 。可能不支持这个东西:github.com/pydata/pandas/issues/2485
  • 感谢您的建议。如前所述,对于 Pandas 不支持这种子类化,我们无法按照建议的答案访问 DataFrame 的属性。也许我无法通过使用 Python 中另一个实例的现有方法来初始化实例对象。
猜你喜欢
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-28
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多