2015-10-22 4 views
-3

Я работаю над программой, но получаю сообщение об ошибке «Тип объекта« Карточка »не имеет атрибута 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) 

Любая помощь в решении этого было бы здорово спасибо

+0

Что вы ожидали от «Card.fileName», и почему? – user2357112

+0

У меня есть другой код, который будет произвольно создавать строку, чтобы выбрать карту в другом месте, а затем я называю ее в TheGame, поэтому я могу назначить случайное изображение для imageLabel. – BradRisch

+1

Да, но что это связано с 'Card.fileName'? Откуда вы ожидаете, что этот атрибут исходит? – user2357112

ответ

2

у вас есть три класса атрибуты:.... RANKS, SUITS и BACK_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.

+0

Спасибо! Это очень помогло. – BradRisch

Смежные вопросы