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