簡體   English   中英

為什么在Python中出現此屬性錯誤?

[英]Why am I getting this attribute error in Python?

在此先感謝您的幫助,我知道這可能是一個新問題,但我只是無法通過搜索找到任何可以回答我問題的內容。 這是回溯的相關部分:

  File "war.py", line 183, in __battle
    if (card1 > card2):
  File "war.py", line 24, in __lt__
    return self.int_id % 13 < other.int_id % 13
AttributeError: 'function' object has no attribute 'int_id'

我對這意味着什么感到困惑。...“功能”對象是什么? 另外,為什么要從比比較大的行調用lt 考慮到我已經對我的Card類(包括card1和card2的實例)進行了單元測試,包括所有豐富的比較運算符,並且現在通過了,為什么現在這是一個問題?

這些是Card類中豐富比較方法的定義(您可能會猜到,int_id只是一個實例變量int):

(對不起,下面的縮進弄亂了)

class Card():

    def __init__(self, int_id):
        self.int_id = int_id

    def __lt__(self, other):
        return self.int_id % 13 < other.int_id % 13

    def __le__(self, other):
        return self.int_id % 13 <= other.int_id % 13

    def __eq__(self, other):
        return self.int_id % 13 == other.int_id % 13

    def __ne__(self, other):
        return self.int_id % 13 != other.int_id % 13

    def __gt__(self, other):
        return self.int_id % 13 > other.int_id % 13

    def __ge__(self, other):
        return self.int_id % 13 >= other.int_id % 13

從錯誤'function' object has no attribute 'int_id' ,我猜想if (card1 > card2): 'function' object has no attribute 'int_id'該功能對象正在與該行中的Card進行比較。 如果其中一張卡被錯誤地分配為功能,則可能會發生這種情況。 例如, card1 = getMyOtherCard而不是card1 = getMyOtherCard()

card1以某種方式來引用一個函數(您是否在函數或方法調用上省略了括號?)。

結果, card1 < card2被重新排列為card2 < card1 (因為function對象沒有比較運算符),這就是為什么__lt__原因。

來自http://docs.python.org/reference/datamodel.html#object.__lt__

這些方法沒有交換參數版本(當left參數不支持該操作但right參數支持該操作時使用); 相反, __lt__()__gt__()是彼此的反映[...]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM