Java에서 List.toString ()을 호출하면 List 내의 각 객체에 대해 toString () 메서드가 자동으로 호출됩니다. 예를 들어, 내 목록에 o1, o2 및 o3 객체가 포함 된 경우 list.toString ()은 다음과 같습니다.
"[" + o1.toString() + ", " + o2.toString() + ", " + o3.toString() + "]"
Python에서 유사한 동작을 얻을 수있는 방법이 있습니까? 클래스에서 __str __ () 메서드를 구현했지만 다음을 사용하여 객체 목록을 인쇄 할 때 :
print 'my list is %s'%(list)
다음과 같이 보입니다.
[<__main__.cell instance at 0x2a955e95f0>, <__main__.cell instance at 0x2a955e9638>, <__main__.cell instance at 0x2a955e9680>]
파이썬이 목록 내의 각 요소 (또는 그 문제에 대한 dict)에 대해 자동으로 __str__을 호출하도록 할 수 있습니까?
답변
파이썬 목록에서 문자열을 호출하면 __repr__
내부의 각 요소에 대한 메서드가 호출 됩니다. 일부 항목 __str__
과 __repr__
동일합니다. 해당 동작을 원하면 다음을 수행하십시오.
def __str__(self):
...
def __repr__(self):
return self.__str__()
답변
답변
당신이 할 수있는 두 가지 쉬운 일은 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 ()을 재귀 적으로 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