Решение на Тесте карти от Стефани Цакова
Резултати
- 10 точки от тестове
- 0 бонус точки
- 10 точки общо
- 16 успешни тест(а)
- 0 неуспешни тест(а)
Код
Лог от изпълнението
................ ---------------------------------------------------------------------- Ran 16 tests in 0.023s OK
История (4 версии и 4 коментара)
Стефани обнови решението на 21.03.2014 11:35 (преди над 10 години)
Правилно си се ориентирала, че не е нужно да напишеш всички класове по отделно в колекцията, обаче Eval is evil. За целта можеш да използваш locals() a може и да съставиш самите класове с тази функция
относно type()
King = type('King', (Rank,), {'__init__': Rank.__init__('K')})
King = type('King', (Rank,), {'__init__': functools.partial(Rank.__init__, symbol='A')})
- и много други, които опитах
Нито едно от въпросните не присвоява на symbol стойността 'К' и съответно нататък нищо не става.
Не е задължително да добавяш атрибутите си в конструктора, може и така:
class King:
symbol = 'K'
swag = 1337
wives = 0
def __init__(self, name):
self.name = name
Така дефинирани атрибутите могат и да се достъпват от класа.
>>> King.symbol
'K'
>>> King.name # няма го
съответно с type
:
>>> type('King', (Rank, ), {'symbol': 'K', '__init__': '...'}
Иначе, така както се опитваше да го направиш би се сработило така:
>>> King = type('King', (Rank,), {'__init__': lambda self: Rank.__init__('K')})
За lambda
ще говорим по-късно, но е начин да направиш функция която е безименна и е на само един ред.
King = type('King', (Rank,), {'__init__': lambda self: Rank.__init__('K')})
така също не се получаваше,
но с
-
King = type('King', (Rank,), {'__init__': lambda self: Rank.__init__
(self,'K')})
става.
Edit: Оправих locals(), но с type се получава някакъв бъг и ще изчакам решенията на другите да видя къде е проблемът.