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

时间:2011-12-01 15:11:36

标签: 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

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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