본문 바로가기
파이썬

파이썬에서 문자열에 대한 객체

by º기록 2020. 10. 21.
반응형

문자열을 구현하고 깊이있는 함수와 같은 데이터 개체가 있습니다.

나는 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

 

 

반응형

댓글