나는 카드 덱을 만드는 것을 망설입니다. 나는 eval (repr (object))이 객체 stack overflow topic과 동등해야한다는 것을 읽은 문제가있다.Python eval (repr (object)) - 구문이 잘못되었습니다.
내 카드, Card 클래스 및 Deck 클래스에 대해 두 가지 클래스를 구현했습니다. 각각은 실제로 객체를 생성하는 구문에 가깝게 유지하려고하는 repr 메소드를 가지고 있습니다. 초기화 및 카드에 repr 및 갑판에 대한 코드 :
print(eval(repr(self.deck.deck)))
File "<string>", line 1
{'hearts': [<class 'cards.Card'>(1,'hearts'), <class 'cards.Card'>(2,'hearts'), <class 'cards.Card'>(3,'hearts'), <class 'cards.Card'>(4,'hearts'), <class 'cards.Card'>(5,'hearts')], 'clubs': [<class 'cards.Card'>(1,'clubs'), <class 'cards.Card'>(2,'clubs'), <class 'cards.Card'>(3,'clubs'), <class 'cards.Card'>(4,'clubs'), <class 'cards.Card'>(5,'clubs')], 'spades': [<class 'cards.Card'>(1,'spades'), <class 'cards.Card'>(2,'spades'), <class 'cards.Card'>(3,'spades'), <class 'cards.Card'>(4,'spades'), <class 'cards.Card'>(5,'spades')], 'diamonds': [<class 'cards.Card'>(1,'diamonds'), <class 'cards.Card'>(2,'diamonds'), <class 'cards.Card'>(3,'diamonds'), <class 'cards.Card'>(4,'diamonds'), <class 'cards.Card'>(5,'diamonds')]}
^
SyntaxError: invalid syntax
나는 단순히 때문에 카드 클래스가 표시되는 방법입니다 추측하고있다 : 여기
class Card(object):
def __init__(self, num, suit):
self.__num = num
self.__suit = suit
def __repr__(self):
return "{!r}({!r},{!r})".format(self.__class__, self.__num, self.__suit)
class Deck(object):
def __init__(self, cards=None):
if not cards:
self.__cards = {"diamonds":[], "hearts":[], "spades":[], "clubs":[]}
else:
self.__cards = cards
def __repr__(self):
return "{!r}({!r})".format(self.__class__, self.__dict__)
와는 오류입니다. {! r}을 {! s}로 대체하려고 시도했지만 변경되지 않았습니다. 나는 거기에 클래스 카드의 사실을 코딩 단지 열심히 고려하고 있었지만, 나는 그것을 할 의도가 어떤 구체적인 방법이있을 것이라고 기대했다.
는 해결하려면 그냥 self.__class__
후 .__name__
를 추가하고 사용하는 데 필요한 을 {!의} (그래서 따옴표를 제거하기) 즉
예, 단위 테스트에 repr 테스트와 마찬가지로 포함시키려는 의도였습니다. 더 적절한 방법이 있습니까? 감사합니다. :) – Healsgood
'copy (self) : return eval (repr (self))'는 인스턴스의 복제본을 만드는 방법을 구현하는 좋은 방법입니다. 그게 뭐가 잘못 되었습니까? 아니면 "더 좋은 방법"이 무엇입니까? –