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

Python AttributeError:type object';p';没有属性';速度';,python,class,sorting,key,Python,Class,Sorting,Key,获取AttributeError的原因:类型对象“p”没有属性“speed”。我在下面的例子中清楚地定义了速度。为什么会发生这种情况。以下是代码中的内容: 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',

获取AttributeError的原因:类型对象“p”没有属性“speed”。我在下面的例子中清楚地定义了速度。为什么会发生这种情况。以下是代码中的内容:

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

您尚未在
turn\u 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)

您正在尝试按类
p
的速度对其实例列表进行排序

错误消息
AttributeError:type对象“p”没有属性“speed”
告诉您类p没有速度属性

这是真的:p的实例有一个speed属性,但类p没有

另外,
参数已排序
,不是一个简单的属性:

键指定一个参数的函数,该参数用于提取 每个列表元素的比较键:key=str.lower。默认值 值为无(直接比较元素)

要按列表中实例的属性排序,可以执行以下操作:

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
中添加一个方法,用于排序:

class p(object):
    def __init__(self, name, speed):
        self.name = name
        self.speed = speed

    def get_speed(self):
        return self.speed

order = sorted(uic, key=p.get_speed)

看起来p本身并没有在函数中定义turn_order i get TypeError:“int”对象是不可调用的谢谢回答