Python 调用父级';没有硬编码参数的子类中的s类
我是Python的新手,在一个工作项目中一直在与继承概念作斗争。基类将从一个配置文件中获取目录路径、表名等(我不打算这样做,因为这与下面的问题无关),并通过super()\uuuuuu\init\uuu将其传递给子类 基类还具有将数据帧导出到MS SQL Server的方法。问题是,我无法将pandas数据帧从子类传递到父类,只能传递硬编码的值。我之所以这样做是因为数据帧彼此之间有很大的不同(需要独特的数据操作),但它们都来自同一个地方,并且将被放置在同一个数据库中 因此,我几乎需要从父级运行SQL_导出,并将子级中定义的数据帧作为输入。我尝试将SQLExport放在我的init中,但是我得到了 AttributeError:'函数'对象没有'to_sql'属性 我所拥有的:Python 调用父级';没有硬编码参数的子类中的s类,python,oop,Python,Oop,我是Python的新手,在一个工作项目中一直在与继承概念作斗争。基类将从一个配置文件中获取目录路径、表名等(我不打算这样做,因为这与下面的问题无关),并通过super()\uuuuuu\init\uuu将其传递给子类 基类还具有将数据帧导出到MS SQL Server的方法。问题是,我无法将pandas数据帧从子类传递到父类,只能传递硬编码的值。我之所以这样做是因为数据帧彼此之间有很大的不同(需要独特的数据操作),但它们都来自同一个地方,并且将被放置在同一个数据库中 因此,我几乎需要从父级运行S
from configparser import ConfigParser
import pandas as pd
config_object = ConfigParser()
config_object.read('config.ini')
class Parent:
def __init__(self, report, df, date=today):
self.report = report
self.df = df
self.name = config_object[self.report]['name']
self.table_name = config_object[self.report]['table_name']
def SQLExport(self):
return self.df.to_sql(self.table_name, con="engine")
class Child(Parent):
def __init__(self):
super().__init__('REPORTNAME', self.load_dataframe)
super().SQLexport(self)
def load_dataframe(self):
self.df = pd.read_json(self.name + ".json")
if __name__ == '__main__':
x = Child()
谢谢 代码存在多个问题
函数名在客户端类中是错误的(它应该是super().SQLexport(self)
),它不接受任何参数,因此self不需要传递self.SQLexport
-pd.read_json(self.name.+“.json”)
类没有属性Child
,因此self.name将失败name
- self.load_dataframe函数正在传递给super.init方法,而不是子类中的dataframe和
函数中的无返回语句(load_dataframe
)return df
from configparser import ConfigParser
import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('sqlite:///:memory:')
config_object = ConfigParser()
config_object.read('config.ini')
class Parent:
def __init__(self, report, df):
self.report = report
self.df = df
self.name = config_object[self.report]['name']
self.table_name = config_object[self.report]['table_name']
def SQLExport(self):
print(self.table_name)
return self.df.to_sql(self.table_name, con=engine)
class Child(Parent):
def __init__(self):
self.name="test_123"
super().__init__('REPORTNAME', self.load_dataframe())
super().SQLExport()
def load_dataframe(self):
self.df = pd.read_json(self.name + ".json")
return self.df
def read_data(self):
print(engine.execute("SELECT * FROM sample_table").fetchall())
if __name__ == '__main__':
x = Child()
x.read_data()
谢谢@nalanagula,我假设
super()\uuuu init\uuuu
会自动生成Child
继承父项的属性。我没有意识到我必须在新类中重新分配变量。它将解决这个问题,以及我在另一节课上遇到的一个问题。干杯