返回对象时覆盖其方法

时间:2018-12-10 16:08:47

标签: python python-3.x class jupyter-notebook

我已经用这样的类编写了代码:

import sqlalchemy
import pandas as pd
from functools import partial

class dataBase:
    def __init__(self, connection_string):
        self.engine = sqlalchemy.create_engine(connection_string)
        self.read_sql = partial(pd.read_sql, con = self.engine)
        self.read_sql_table = partial(pd.read_sql_table, con = self.engine)
        self.read_sql_query = partial(pd.read_sql_query, con = self.engine)

这里的想法是用默认的con值覆盖pandas方法。所有这些函数都返回一个DataFrame,最终,其用法将类似

db = dataBase('blah blah connection string')
df = db.read_sql_table('tablename')  # note I don't need to specify con = engine
df.to_sql(con = ?)    # could use con = db.engine, but I'd prefer
                      # to specify that in the dataBase class somewhere

问题在于这里没有默认的连接引擎。为了解决这个问题,我想写

pd.DataFrame.to_sql = partial(pd.DataFrame.to_sql, con = my_engine)

我想在某个地方,但是由于它是一个全局设置,所以我不能将它放在我的班级中,因为我需要在逐个班级基础上设置引擎的知识,所以我也不能将它放在外面。

很显然我有点糊涂了,我应该如何 。为了避免出现x-y问题,我认为最终目标是使用出现在任何位置的默认引擎覆盖con;我该怎么做?

N.b我是一个完整的python新手,所以如果您完全不同地做这件事,我很想学习如何以及为什么

0 个答案:

没有答案