eval() и repr() - Почему eval(repr(elf)) выдает ошибку invalid syntax?

Алексей

Новичок
Пользователь
Апр 22, 2020
6
1
3
Кто подскажет, почему eval(repr(elf)) выдает ошибку invalid syntax
Python:
class ELfUnits:

    def __init__(self, race, damage=10):
        self.race = race
        self.damage = damage

    def __repr__(self):
        return "Class Unit Elf: ({}, {})".format(self.race, self.damage)

    def __str__(self):
        return f'{self.race} with damage = {self.damage}'

    def __eq__(self, other):
        if isinstance(other, ELfUnits):
            return self.race == other.race and self.damage == other.damage
        else:
            return False

elf = ELfUnits('elf')
print(elf)

print(eval(repr(elf))) ?????
 
Последнее редактирование модератором:

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
eval выполняет код из предоставленной ему строки. Разве Python может выполнить такой код который возвращает ему метод __repr__ ?
По сути, вы хотите чтобы питон выполнил данный код:
Python:
Class Unit Elf: ('elf', 10)
И зачем вообще тут eval? eval это зло, не нужно его использовать.
 

Алексей

Новичок
Пользователь
Апр 22, 2020
6
1
3
eval выполняет код из предоставленной ему строки. Разве Python может выполнить такой код который возвращает ему метод __repr__ ?
По сути, вы хотите чтобы питон выполнил данный код:
Python:
Class Unit Elf: ('elf', 10)
И зачем вообще тут eval? eval это зло, не нужно его использовать.


почему ошибка синтаксиса? я просто хочу понять...
я прохожу курс на udemy, там что то примерное работает, у меня нет.
я написал, вроде, правильно и хочу получить экземпляр класса. чтобы потом сравнить
Python:
eval(repr(elf)) == elf
для этого и метод __eq__
 
Последнее редактирование:

Алексей

Новичок
Пользователь
Апр 22, 2020
6
1
3
если поменять
Python:
def __repr__(self):
    return f'{self.race}, {self.damage}'
то получаю тип tuple, но не __main__.ElfUnit
 

Алексей

Новичок
Пользователь
Апр 22, 2020
6
1
3
Я разобрался. Примеры из курса демонстрируются в jupyter
Соответственно, есть разница между, когда сам работаешь в PyCharm
Короче, запутался немного
 

Форум IT Специалистов