我想从查询数据库中为python中的类对象设置属性值,但是我收到此错误:
Traceback (most recent call last):
File "D:/s2/semester 3/tesis/phyton/connectDatabase", line 27, in <module>
data.append(Spatial_object(row[i]))
TypeError: __init__() takes exactly 4 arguments (2 given)
这是我的代码:
class Spatial_object:
def __init__(self, jenis,Lat,Long):
self.jenis=jenis
self.Lat=Lat
self.Long=Long
cur.execute("""SELECT primary_descript,lat,long from data_crime""")
row = cur.fetchall()
data = []
for i in range(0,rows_effected):
data.append(Spatial_object(row[i]))
答案 0 :(得分:2)
Python确切地说明了问题所在 - Spatial_object.__init__()
方法需要三个显式参数:jenis
,Lat
和Lon
,而Spastial_object(row[i])
只提供一个}}。尝试将行破坏为参数列表,即:Spatial_object(*row[i])
。
答案 1 :(得分:0)
假设primary_descript
映射到jenis
,那么你需要传递它以及你从数据库中检索的lat和long(一旦你的代码的那部分工作juga :))实例化Spatial_object
对象。
这是因为类__init__()
的{{1}}方法需要4个参数:Spatial_object
,self
,jenis
和Lat
来匹配声明:
Long
def __init__(self, jenis,Lat,Long):
,它是对象本身实例的引用,是自动传递的。
代码的第二部分看起来不会起作用,例如什么是self
?无论如何,您不需要知道返回了多少行,您可以使用以下内容迭代行:
rows_effected
您甚至可以使用列表解析进一步简化代码:
cur.execute("""SELECT primary_descript,lat,long from data_crime""")
data = []
for jenis, lat, lon in cur.fetchall():
data.append(Spatial_object(jenis, lat, lon))
或不太可读的版本:
data = [Spatial_object(jenis, lat, lon) for jenis, lat, lon in cur.fetchall()]
最后,您的课程名称data = [Spatial_object(*row) for row in cur.fetchall()]
比Spatial
更好。