반응형
문자열을 구현하고 깊이있는 함수와 같은 데이터 개체가 있습니다.
나는 str 과 eq 를 구현했고 동등성이 잘 작동하지만 str 이 같은 방식으로 동작하도록 만들 수는 없습니다.
class Bean(object):
def __init__(self, attr1, attr2):
self.attr1 = attr1
self.attr2 = attr2
def __str__(self):
return str(self.__dict__)
def __eq__(self, other):
return self.__dict__ == other.__dict__
내가 실행할 때 :
t1 = Bean("bean 1", [Bean("bean 1.1", "same"), Bean("bean 1.2", 42)])
t2 = Bean("bean 1", [Bean("bean 1.1", "same"), Bean("bean 1.2", 42)])
t3 = Bean("bean 1", [Bean("bean 1.1", "different"), Bean("bean 1.2", 42)])
print(t1)
print(t2)
print(t3)
print(t1 == t2)
print(t1 == t3)
나는 얻다:
{'attr2': [<__main__.Bean object at 0x7fc092030f28>, <__main__.Bean object at 0x7fc092030f60>], 'attr1': 'bean 1'}
{'attr2': [<__main__.Bean object at 0x7fc091faa588>, <__main__.Bean object at 0x7fc092045128>], 'attr1': 'bean 1'}
{'attr2': [<__main__.Bean object at 0x7fc0920355c0>, <__main__.Bean object at 0x7fc092035668>], 'attr1': 'bean 1'}
True
False
t1과 t2가 동일한 값을 포함하기 때문에 같음은 (예상대로) true를 반환하는 반면 t3은 목록에 다른 값을 포함하므로 결과는 (예상대로) false입니다. 내가 원하는 것은 to 문자열에 대해 동일한 동작을 갖는 것입니다 (기본적으로 목록의 요소 (또는 세트 또는 dict ...)에 대해서도 심도있게 진행하는 것입니다.
print (t1)의 경우 다음과 같은 것을 얻고 싶습니다.
{'attr2': ["{'attr2': 'same', 'attr1': 'bean 1.1'}", "{'attr2': 42, 'attr1': 'bean 1.2'}"], 'attr1': 'bean 1'}
실제로 다음을 수행하면 얻을 수 있습니다.
Bean("bean 1", [Bean("bean 1.1", "same").__str__(), Bean("bean 1.2", 42).__str__()]).__str__
attr1 속성의 유형을 모르기 때문에 내 Bean 객체의 attr2 (목록 일 수 있지만 세트, 사전 등일 수 있음)는 유형 검사가 필요하지 않은 간단하고 우아한 솔루션을 갖는 것이 좋습니다.
이게 가능해 ?
해결 방법
def __repr__(self):
return str(self.__dict__)
참조 페이지 https://stackoverflow.com/questions/43675771
반응형
'파이썬' 카테고리의 다른 글
파이썬 try / catch를 사용하지 않고 int 값이 Python Enum에 있는지 어떻게 테스트합니까? (0) | 2020.10.21 |
---|---|
파이썬 requirements.txt 대 setup.py (0) | 2020.10.21 |
파이썬 Python 목록 항목에서 구두점 제거 (0) | 2020.10.20 |
파이썬 How to subtract a day from a date? (0) | 2020.10.20 |
파이썬 모듈이 Python에 설치되었는지 확인하고 그렇지 않은 경우 코드 내에 설치하는 방법은 무엇입니까? (0) | 2020.10.20 |
댓글