인쇄 호출을 목록 내의 파이썬 객체의 __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
'programing' 카테고리의 다른 글
Android 앱이 제거했다가 다시 설치한 후 데이터를 기억합니다. (0) | 2023.07.30 |
---|---|
MySQL에서 트리거에 변수를 선언하는 방법? 코드에 대해 몇 줄을 실행하는 동안 오류가 발생합니다. (0) | 2023.07.30 |
Spring에서 시작한 임베디드 H2 데이터베이스의 내용 보기 (0) | 2023.07.25 |
스프링 부트 - JSON 데이터 암호화 (0) | 2023.07.25 |
Angular 2 - 이미지 URL이 유효하거나 손상되었는지 확인합니다. (0) | 2023.07.25 |