引用要在其他Python类中创建的类实例

时间:2019-01-07 11:51:55

标签: python-3.x

我有一个项目,该项目分为3个文件。
第一个是包含一些API类,最重要的是SQLConnection类的文件。
第二个文件包含类Data中的所有数据结构和数据逻辑
第三个文件是所有更高级别的逻辑和数据操作。
我的项目过于简单了:

"""Contents of file1"""
import pandas as pd
import getpass
from sqlalchemy import create_engine

class SQLConnection:
    def __init__(self,user,hostname,db,):
        self.user = user
        self.hostname = hostname
        self.db = db
        pword = getpass.getpass("Enter password for user {}".format(user))
        engine = create_engine("mysql://{}:{}@{}/{}".format(user,pword,hostname,db))
        self.cnx = engine.connect()

    def write_to_db(self, df, table_name):
        try:
            df.to_sql(table_name,con = self.cnx,if_exists='append',index=False)
        except Exception as e:
            print("\n \n")
            print(df,"\n", e)
            pass


"""Contents of file2"""
# Dependancies:
import pandas as pd
# Local imports:
from file1 import SQLConnection

class Data:
    schema = ['col1','col2']
    def __init__(self,foo,bar):
        self.arg1 = foo
        self.arg2 = bar
        df = pd.DataFrame([[self.arg1,self.arg2]],columns = Data.schema)
        """ !!! THIS will not work because i need to access the instance !!! """
        SQLConnection.write_to_db(df,'Data')


"""Contents of file3"""
# Local imports:
from file2 import Data

entry = Data(foo="something",bar="something else")

我有一个问题,我需要在SQLConnection类的__init__()中使用Data的实例。我考虑过可能要在文件3中实例化SQLConnection,然后以某种方式将其传递给Data,但我没有找到很多参考资料来实现此目的。
我将需要一种将类的实例传递给另一个类的方法,或者一种规避此问题的方法

1 个答案:

答案 0 :(得分:0)

我想到的最干净的方法就是在SQLConnection构造函数中传递Data实例:

class Data:
    def __init__(self, foo, bar, conn):
        ...
        conn.write_to_db....

在文件3中:

from file1 import SQLConnection
from file2 import Data

conn = SqlConnection(...)
entry = Data(foo="something",bar="something else", conn=conn)