Python调用构造函数的成员函数

Dea*_*ado 2 python oop constructor

我们以这个类为例,它扩展了MySQLDB的连接对象.

class DBHandler(mysql.connections.Connection):
    def __init__(self,cursor=None):
        if cursor == None:
            cursor = 'DictCursor'

            super(DBHandler,self).__init__(host = db_host,
              user = db_user,
              passwd = db_pass,
              db = db,
              cursorclass=getattr(mysql.cursors, cursor))


    def getall(self,q,params=None):
        try:
           cur = self.cursor()
           cur.execute(q,params)
           res = cur.fetchall()
           return res
         except mysql.OperationalError:
            #this is the line in question
            pass


    def execute(self,q,params):
        cur = self.cursor()
        cur.execute(q,params)
        self.commit()
        return cur.lastrowid
Run Code Online (Sandbox Code Playgroud)

这对于更简单地访问常见的查询很有帮助.

在注释标记的行上,是否有可能在Python中调用对象构造函数,即使这是一个成员函数?我使用此示例来说明,因为它会在运行查询之前在超时时删除它时有效地重新建立连接.

我知道MySQLdb的ping()方法,这实际上只是一个能力问题. 在python中,是否可以从实例上调用的成员函数中调用构造函数来重新初始化该实例? 谢谢!

Céd*_*ien 5

是的,你可以,因为最好用另一种方法(a def init(self):)提取你的初始化代码.

这是因为__init__它不是对象的构造函数,它更像是实例的"初始化器",真正的构造函数__new__是负责实例创建的方法.