我创建了一个类distance_neighbor
,其中一个属性是class的对象列表Crime
。
那是我从数据库查询结果中获得的所有属性的值。
首先,我将data_Crime
list设置为**Crime
class上attribute的值distance_neighbor
,并在使用完之后使用del清除了data_Crime list,以便该data_Crime
列表可以在下一个循环中使用。
这是我的代码:
conn = psycopg2.connect("dbname='Chicago_crime' user='postgres' host='localhost' password='1234'")
cur= conn.cursor()
minDistance=float(input("Nilai minimum distance : "))
cur.execute("""SELECT id_objek1, objek1, id_objek2, objek2, distance from tb_distance1 where distance<'%f'""" %(minDistance))
class Crime:
def __init__(self, id_jenis, jenis):
self.id_jenis=id_jenis
self.jenis=jenis
class distance_neighbor (Crime):
def __init__(self, distance, **Crime):
self.distance = distance
self.Crime = Crime
data_Crime =[]
data_distance = []
for id_objek1, objek1, id_objek2, objek2, distance in cur.fetchall():
data_Crime.append(Crime(id_objek1,objek1))
data_Crime.append(Crime(id_objek2,objek2))
data_distance.append(distance_neighbor(distance, data_Crime))
del data_Crime[:]
错误信息:
data_distance.append(distance_neighbor(distance, data_Crime))
TypeError: __init__() takes exactly 2 arguments (3 given)
我已经使用以下答案修复了我的代码,谢谢
这应该更接近您想要的:
class Crime(object):
def __init__(self, id_jenis, jenis):
self.id_jenis=id_jenis
self.jenis=jenis
class DistanceNeighbor(object):
def __init__(self, distance, crimes):
self.distance = distance
self.crimes = crimes
data_distance = []
for id_objek1, objek1, id_objek2, objek2, distance in cur.fetchall():
crimes = [Crime(id_objek1,objek1), Crime(id_objek2,objek2)]
data_distance.append(DistanceNeighbor(distance, crimes))
Python 2中的类应始终从继承object
。按照惯例,类名在CamelCase中。
DistanceNeighbor
from的继承Crime
似乎是不必要的。我改了
实例的属性应该是小写的,因此我使用的crimes
不是类名的重用,而是令人困惑的重用Crime
。
这行:
def __init__(self, distance, **Crime):
将您的Crime
实例列表分开作为单独的参数。在您的情况下,这意味着__init__
接收:
distance, data_Crime[0], data_Crime[0]
这将导致以下错误消息:
TypeError: init() takes exactly 2 arguments (3 given)
的实例Crime
很短。因此,您可以Crime
在一行中创建两个实例的列表,而不是两个追加:
crimes = [Crime(id_objek1,objek1), Crime(id_objek2,objek2)]
由于这样做会在每个循环中创建一个新列表,因此无需像在那样删除每个循环中的列表内容del data_Crime[:]
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句