如何将参数传递到类中以创建PyODBC的Python单例模式包装器实例?

如何将参数传递到类中以创建PyODBC的Python单例模式包装器实例?,python,singleton,pyodbc,qodbc,Python,Singleton,Pyodbc,Qodbc,为了寻找人们用来包装PyODBC的类模式的示例,我在SO:找到了这个示例 我不理解DBConnection类在原始示例中是如何工作的。DBConnector是如何初始化的-- --不将所需的初始值传递给DBConnector()?当我尝试添加它们时,我得到TypeError:DBConnection()不接受任何参数 import pyodbc class DBConnector(object): def __new__(cls, *args, **kwargs):

为了寻找人们用来包装PyODBC的类模式的示例,我在SO:找到了这个示例

我不理解DBConnection类在原始示例中是如何工作的。DBConnector是如何初始化的--

--不将所需的初始值传递给
DBConnector()
?当我尝试添加它们时,我得到
TypeError:DBConnection()不接受任何参数

import pyodbc    
class DBConnector(object):
    def __new__(cls, *args, **kwargs):
        if not hasattr(cls, 'instance'):
            cls.instance = super(DBConnector, cls).__new__(cls)
        return cls.instance

    def __init__(self, ipaddress, port, dsn, remotedsn):
        self.ipaddress = ipaddress
        self.port = port
        self.dsn = dsn
        self.remotedsn = remotedsn
        self.dsnstr_default = 'OpenMode=F;OLE DB Services=-2;'
        self.dbconn = None

    # creates new connection
    def create_connection(self):
        return pyodbc.connect(self.dsnstr_default,
                                IPAddress = self.ipaddress,
                                Port = self.port,
                                DSN = self.dsn,
                                RemoteDSN = self.remotedsn,
                                autocommit=True)

    # For explicitly opening database connection
    def __enter__(self):
        self.dbconn = self.create_connection()
        return self.dbconn

    def __exit__(self):
        self.dbconn.close()

class DBConnection(object):
    connection = None

    @classmethod
    def get_connection(cls, new=False, *args, **kwargs): << ADDED THIS
        if new or not cls.connection:
            cls.connection = DBConnector(*args, **kwargs).create_connection()
                            /\/\/\/\/\/\/\/\/\/SEE NOTE 
        return cls.connection

    @classmethod
    def GetCompanyInfo(cls):
        """execute query on singleton db connection"""
        connection = cls.get_connection()
        try:
            connection.setencoding('utf-8')
            cursor = connection.cursor()
        except pyodbc.ProgrammingError:
            connection = cls.get_connection(new=True)
            cursor = connection.cursor()
        # Start Query
        cursor.execute("SELECT CompanyName, EIN, SSN FROM Company")
        for cname, ein, ssn in cursor.fetchall():
            result = (cname, ein, ssn)
        # End Query
        cursor.close()
        return result
现在我很好奇 如果我把连接和查询都放在一个类中——Monster类,我就可以完成

或者我更了解Car>bluecaroop模式,在SO的另一篇文章中,我举了一个例子。这对我来说更有意义

现在我真的很好奇原作是如何运作的:

@classmethod
def get_connection(cls, new=False):
    """Creates return new Singleton database connection"""
    if new or not cls.connection:
        cls.connection = DBConnector().create_connection()
    return cls.connection
如何在没有INIT的情况下将参数放入DBConnection类?帖子也被标记为Django,所以他们可能跳过了假定的Django上下文?还是Django免费提供的

a = DBConnector('127.0.0.1', '4500', 'pyauto_local', None)
a.create_connection()
# <pyodbc.Connection at 0x5772110>
a = DBConnector('127.0.0.1', '4500', 'pyauto_local', None)
a.__enter__()
# <pyodbc.Connection at 0x605f278>
a.__exit__()
cls.connection = DBConnector('127.0.0.1', '4500', 'pyauto_local', None).create_connection()
                             /\/\/\/\/\/\/ NOTED ABOVE
# Testing
cx = DBConnection()
cx.GetCompanyInfo()
# ('Zep', '12-3456789', None)
@classmethod
def get_connection(cls, new=False):
    """Creates return new Singleton database connection"""
    if new or not cls.connection:
        cls.connection = DBConnector().create_connection()
    return cls.connection