为什么我得到AttributeError:输入object' p'没有属性'速度'。我在下面的例子中清楚地定义了速度。为什么会这样。以下是我在代码中的内容:
class p(object):
def __init__(self, name, speed):
self.name = name
self.speed = speed
ch1 = p('n1', 1)
ch2 = p('n2', 2)
ch3 = p('n3', 3)
e1 = p('e1', 1)
e2 = p('e2', 2)
e3 = p('e3', 3)
class party():
def __init__(self, group=[]):
self.group = group
pg = party
pg.group = [ch1, ch2, ch3]
eg = party
eg.group = [e1, e2, e3]
def turn_order(ag, dg):
uic = []
for unit in ag.group:
uic.append(unit)
for unit in dg.group:
uic.append(unit)
order = sorted(uic, key=p.speed)
return order
order = turn_order(pg, eg)
print order
答案 0 :(得分:2)
您尚未在turn_order
函数中定义p对象。
为了使用p,你需要创建类的实例,然后再调用实例方法。
当您致电p.speed
时,它会尝试找到一个名为speed的静态成员,但您没有。
解决方案示例:
def turn_order(ag, dg):
uic = []
for unit in ag.group:
uic.append(unit)
for unit in dg.group:
uic.append(unit)
order = sorted(uic, key=lambda u : u.speed)
答案 1 :(得分:0)
您正在尝试按其速度对类 p
的实例列表进行排序。
错误消息AttributeError: type object 'p' has no attribute 'speed'
告诉您类 p没有速度属性。
这是真的:p的实例具有speed属性,但 class p没有。
此外,key
的{{1}}参数,must be a function,而非简单属性:
key指定用于提取a的一个参数的函数 每个列表元素的比较键:key = str.lower。默认 value为None(直接比较元素)。
要按列表中实例的属性进行排序,您可以执行以下操作:
sorted
order = sorted(uic, key=lambda x: x.speed)
是一个匿名函数,它接受一个对象作为参数并返回其lambda x: x.speed
属性。这与:
speed
或者,您可以向def get_speed(obj):
return obj.speed
order = sorted(uic, key=get_speed)
添加可用于排序的方法:
p