我想编写一个包含所有MySQL操作的类。
现在,我甚至无法将类实例化。
Traceback (most recent call last):
File "./compare.py", line 71, in <module>
main()
File "./compare.py", line 67, in main
db = Table.mysqlconnect()
TypeError: unbound method mysqlconnect() must be called with Table instance as first argument (got nothing instead)
代码:
import MySQLdb
class Table(object):
""" Using Databases """
def __init__(self, db, name ):
self.db = db
self.name = name
self.cur = self.db.cursor()
def mysqlconnect():
conn = MySQLdb.connect (host = "mysql.blah.com",
user = "user",
passwd = "password",
db = "database")
cursor = conn.cursor ()
cursor.execute ("SELECT VERSION()")
row = cursor.fetchone ()
print "server version:", row[0]
cursor.close ()
conn.close ()
def main():
db = Table.mysqlconnect()
pass
if __name__ == '__main__':
main()
答案 0 :(得分:3)
错误完全正确:
TypeError: unbound method mysqlconnect() must be called with Table instance as first argument (got nothing instead)
换句话说,您使用的是班级名称Table
),而不是班级Table
的{{3}}。
阅读instance,他们完全按照您的意愿行事。如果你想阅读类和对象,那么these examples非常好。
答案 1 :(得分:3)
你应该阅读这些文档,但你要找的是:
db = Table()
db.mysqlconnect()
简短说明:mysqlconnect
是Table
类的实例方法。
很长的解释:Table
现在是一个抽象的概念 - 你已经告诉Python解释器它应该做什么,但你还没有真正做过。对于你的班级来说,这就像蓝图一样。在使用它之前,或使用任何定义为它的一部分的方法*你需要先实际“构建它”。
这就是你做的事情:db = Table()
这告诉Python解释器我现在有一个名为db
的变量,我希望它是Table()
的一个实例。现在您已经拥有了实例,可以调用实例方法(因为实例方法仅适用于实例)并获得结果。
*有一些叫做类方法的东西你可以在不首先实例化类的情况下使用,但是当你阅读文档时你会看到它。
答案 2 :(得分:0)
另外,mysqlconnect需要使用self来访问类属性。例如:
import MySQLdb
class Table:
def __init__(self, host, user, passwd, name)
self.db = MySQLdb.connect (host = host,
user = user,
passwd = passwd,
db = name)
self.cursor = self.db.cursor()
def mysqlconnect(self):
self.cursor.execute ("SELECT VERSION()")
row = cursor.fetchone()
print "server version:", row[0]
self.cursor.close ()
self.db.close ()
# Main must be outside the table class
def main():
tableInstance = Table("mysql.blah.com", "user", "password", "database")
tableInstance.mysqlconnect()
if __name__ == '__main__':
main()