programing

인쇄 호출을 목록 내의 파이썬 객체의 __str_ 메서드로 만드는 방법은 무엇입니까?

magicmemo 2023. 7. 25. 20:51
반응형

인쇄 호출을 목록 내의 파이썬 객체의 __str_ 메서드로 만드는 방법은 무엇입니까?

자바에서는, 내가 전화하면,List.toString()자동으로 호출됩니다.toString()목록 내의 각 개체에 대한 메서드입니다.예를 들어 내 목록에 개체가 포함된 경우o1,o2,그리고.o3,list.toString()다음과 같이 보입니다.

"[" + o1.toString() + ", " + o2.toString() + ", " + o3.toString() + "]"

파이썬에서 유사한 동작을 할 수 있는 방법이 있습니까?다음을 구현했습니다.__str__()객체 목록을 출력할 때 다음을 사용합니다.

print 'my list is %s'%(list)

다음과 같이 보입니다.

[<__main__.cell instance at 0x2a955e95f0>, <__main__.cell instance at 0x2a955e9638>, <__main__.cell instance at 0x2a955e9680>]

어떻게 파이썬이 나를 부르도록 할 수 있습니까?__str__()목록 내의 각 요소에 대해 자동으로? (또는 해당 사항에 대해 받아쓰기)?

파이썬 목록의 호출 문자열은 다음을 호출합니다.__repr__내부의 각 요소에 대한 방법.일부 항목의 경우,__str__그리고.__repr__똑같습니다.해당 동작을 수행하려면 다음을 수행합니다.

def __str__(self):
    ...
def __repr__(self):
    return self.__str__()

목록 이해를 사용하여 각 항목 str()을 자동으로 사용하여 새 목록을 생성할 수 있습니다.

print([str(item) for item in mylist])

두 가지 쉬운 일을 할 수 있습니다.map기능 또는 이해력을 사용합니다.

하지만 이것은 문자열이 아닌 문자열 목록을 제공합니다.그래서 여러분도 함께 현에 합류해야 합니다.

s= ",".join( map( str, myList ) )

또는

s= ",".join( [ str(element) for element in myList ] )

그런 다음 이 복합 문자열 개체를 인쇄할 수 있습니다.

print 'my list is %s'%( s )

그 출력을 사용하려는 용도에 따라 아마도__repr__더 적합할 수 있습니다.

import unittest

class A(object):
    def __init__(self, val):
        self.val = val

    def __repr__(self):
        return repr(self.val)

class Test(unittest.TestCase):
    def testMain(self):
        l = [A('a'), A('b')]
        self.assertEqual(repr(l), "['a', 'b']")

if __name__ == '__main__':
    unittest.main()

목록 이해를 사용하여 이 작업을 수행하는 것에 대한 이전의 답변에는 동의하지만, 만약 그것이 여러분의 보트를 띄우는 것이라면, 함수 뒤에 그것을 숨길 수 있습니다.

def is_list(value):
    if type(value) in (list, tuple): return True
    return False

def list_str(value):
    if not is_list(value): return str(value)
    return [list_str(v) for v in value]

그냥 재미로 목록에 포함된 모든 것을 재귀적으로 list_str()로 만들었습니다.

이런 거?

a = [1, 2 ,3]
[str(x) for x in a]
# ['1', '2', '3']

이 정도면 충분할 겁니다.

목록과 다른 컨테이너 클래스를 인쇄할 때 포함된 요소는 다음을 사용하여 인쇄됩니다.__repr__,왜냐면__repr__내부 객체 표현에 사용됩니다.전화할 경우:help(object.__repr__)그것은 우리에게 다음과 같이 말할 것.

Help on wrapper_descriptor:

__repr__(self, /)
    Return repr(self).

그리고 우리가 전화하면,help(repr)출력됩니다.

Help on built-in function repr in module builtins:

repr(obj, /)
    Return the canonical string representation of the object.

    For many object types, including most builtins, eval(repr(obj)) == obj.

한다면__str__객체에 대해 구현됩니다.__repr__아닙니다repr(obj)기본 출력을 출력합니다.print(obj)이 중 어느 것도 구현되지 않은 경우.

그래서 유일한 방법은 다음을 구현하는 것입니다.__repr__당신의 수업을 위해.한 가지 가능한 방법은 다음과 같습니다.

class C:           
    def __str__(self):
        return str(f"{self.__class__.__name__} class str ")

C.__repr__=C.__str__       
ci = C()    


print(ci)       #C class str 
print(str(ci))  #C class str 
print(repr(ci)) #C class str 

출력은 객체의 모듈 이름, 클래스 이름, 16진수 메모리 주소입니다.__repr__함수는 재정의되지 않습니다.

__str__인쇄를 사용할 때 개체의 문자열 표현에 사용됩니다.하지만 당신이 객체 목록을 인쇄하고 있고, 목록 위에서 반복해서 호출하지 않기 때문에.str각 항목에 대한 메서드는 객체 표현을 출력합니다.

가지고 있는 것은__str__다음과 같은 작업을 수행해야 하는 함수가 호출되었습니다.

'my list is %s' % [str(x) for x in myList]

다음을 오버라이드하는 경우__repr__이전과 같이 인쇄 방법을 사용할 수 있는 기능:

class cell:
    def __init__(self, id):
        self.id = id
    def __str__(self):
        return str(self.id) # Or whatever
    def __repr__(self):
        return str(self) # function invoked when you try and print the whole list.

myList = [cell(1), cell(2), cell(3)]
'my list is %s' % myList

그러면 당신은 "을 얻을 것입니다.my list is [1, 2, 3]당신의 산출물로서.

언급URL : https://stackoverflow.com/questions/727761/how-to-make-print-call-the-str-method-of-python-objects-inside-a-list

반응형