AttributeError:type object' p'没有属性'速度'

时间:2017-06-25 07:04:28

标签: python class sorting key

为什么我得到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

2 个答案:

答案 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