类型对象没有属性

时间:2015-10-22 03:44:35

标签: python

我正在制作一个程序,但我收到错误"输入对象'卡'没有属性fileName。我已经找到了这方面的答案,但我所见过的与此类似的情况都没有。

class Card:
RANKS = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
SUITS = ('s', 'c','d','h')
BACK_Name = "DECK/b.gif"

def __init__(self, rank, suit):
    """Creates a card with the given rank and suit."""
    self.rank = rank
    self.suit = suit
    self.face = 'down'
    self._fileName = 'DECK/' + str(rank) + suit[0] + '.gif'

class TheGame(Frame):

    def __init__(self):
        Frame.__init__(self)
        self.master.title("Memory Matching Game")
        self.grid()

        self.BackImage = PhotoImage(file = Card.BACK_Name)
        self.cardImage = PhotoImage(file = Card.fileName)

解决这个问题的任何帮助都会很棒。感谢。

1 个答案:

答案 0 :(得分:3)

您有三个属性:RANKSSUITSBACK_Name

class Card:
    # Class Attributes:
    RANKS = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13)
    SUITS = ('s', 'c','d','h')
    BACK_Name = "DECK/b.gif"

您尚未将fileName定义为类属性,因此尝试获取名为fileName的属性将引发AttributeError,表明它不存在。

这是因为fileName,或更确切地说,_fileName已通过self._filename定义为 实例 属性:

# Instance Attributes:
def __init__(self, rank, suit):
    """Creates a card with the given rank and suit."""
    self.rank = rank
    self.suit = suit
    self.face = 'down'
    self._fileName = 'DECK/' + str(rank) + suit[0] + '.gif'

要访问此属性,您必须先使用Card创建c = Card(rank_value, suit_value)对象的 实例 ;然后,您可以通过_filename访问c._filename