[英]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.