2017-06-25 4 views
0

なぜAttributeErrorを取得するのですか?typeオブジェクト 'p'には 'speed'属性がありません。私はあなたが以下に見ることができる例では速度を明確に定義しました。なぜこれが起こるのですか?ここで私は、コードを持っているものです。AttributeError:typeオブジェクト '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 
+0

自体は私が手turn_order – Nebulosar

答えて

0

あなたはインスタンス彼らのスピードによってクラスのpのリストをソートしようとしています。

エラーメッセージAttributeError: type object 'p' has no attribute 'speed'は、クラス pに速度属性がないことを伝えています。

これは本当です。インスタンスのにはspeed属性がありますが、クラス pはありません。

また、sortedからkey引数、must be a functionではなく、シンプルな属性:

key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).

リスト内のインスタンスの属性でソートするには、あなたが行うことができます:

order = sorted(uic, key=lambda x: x.speed)

lambda x: x.speedは、オブジェクトを引数として受け入れ、その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) 
+0

これは助けてくれてありがとう – Hsin

1

あなたはturn_order機能のpオブジェクトを定義していません。

pを使用するには、クラスのインスタンスを作成してからインスタンスメソッドを呼び出す必要があります。

p.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) 
+0

あなたの関数内で定義されていません:あなたは、ソートに使用することができpにメソッドを追加することができ、また

def get_speed(obj): return obj.speed order = sorted(uic, key=get_speed) 

:これは同じですTypeError: 'int'オブジェクトが呼び出せません – Hsin

+0

編集したコードを使用してみてください。 –

+0

お返事ありがとう – Hsin

関連する問題