Python의 목록에서 __str_에 대해 혼동함
에서 온 것으로 있습니다.__str__
toString의 Python 버전과 유사합니다(Python이 오래된 언어라는 것을 알고 있지만).
, 는 를 했습니다 했습니다 를 는 __str__
방법은 다음과 같습니다.
class Node:
def __init__(self, id):
self.id = id
self.neighbours = []
self.distance = 0
def __str__(self):
return str(self.id)
그런 다음 몇 가지 인스턴스를 만듭니다.
uno = Node(1)
due = Node(2)
tri = Node(3)
qua = Node(4)
이러한 개체 중 하나를 인쇄하려고 할 때 예상되는 동작은 연관된 값이 인쇄된다는 것입니다.이런 경우도 있습니다.
print uno
수확량
1
하지만 내가 다음을 할 때:
uno.neighbours.append([[due, 4], [tri, 5]])
그리고 나서.
print uno.neighbours
알겠습니다.
[[[<__main__.Node instance at 0x00000000023A6C48>, 4], [<__main__.Node instance at 0x00000000023A6D08>, 5]]]
내가 기대했던 곳
[[2, 4], [3, 5]]
제가 무엇을 빠뜨리고 있나요?그 외에 내가 하고 있는 움츠러들 만한 일은? :)
하는 두 . 즉, 은 를 하는 을 로 을 를 로 은 str()
그리고.repr()
를 인쇄할 는 . 할 .str()
용도를 ; 가 가 str()
자체의 , 록해를을해나해ftr나e록,ef를tt해list.__str__()
름repr()
개개의 항목에 대해.
도 도 .__repr__()
요.
__repr__ = __str__
수업이 끝날 때쯤이면 몸이 묘기를 부릴 겁니다
자바에 비해 Python의 무한한 우위 때문에, Python은 하나가 아니라 두 개의 String 작업을 가지고 있습니다.
는 ㅇ__str__
하나는, 는 __repr__
__str__
사람이 읽을 수 있는 문자열을 반환합니다.__repr__
내부 표현을 반환합니다.
__repr__
할 수 .repr(obj)
백틱을 `obj`
.
다른 는 Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ, __repr__
.
출력의 사람이 읽을 수 있는 버전을 "Object"(Object)": 예:
class Pet(object):
def __init__(self, name, species):
self.name = name
self.species = species
def getName(self):
return self.name
def getSpecies(self):
return self.species
def Norm(self):
return "%s is a %s" % (self.name, self.species)
if __name__=='__main__':
a = Pet("jax", "human")
print a
돌아온다
<__main__.Pet object at 0x029E2F90>
코드가 "str"인 경우 다른 것을 반환합니다.
class Pet(object):
def __init__(self, name, species):
self.name = name
self.species = species
def getName(self):
return self.name
def getSpecies(self):
return self.species
def __str__(self):
return "%s is a %s" % (self.name, self.species)
if __name__=='__main__':
a = Pet("jax", "human")
print a
반환:
jax is a human
질문에 대한 답변
다른 답변에서 지적된 바와 같이 PEP 3140에서 읽을 수 있듯이,str
list
항목에 각에한출출한에__repr__
는 할 수. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
이 ㅇㅇ을 실행한다면__repr__
더 인 것을 수 있을 이 기대했던 일치하지 입니다., 인 을 입니다 입니다 인 을 . 하지만 올바르게 구현된다면, 기대했던 것과는 다릅니다.
적절한 구현
빠르고 잘못된 해결책은 별칭입니다.__repr__
__str__
.
__repr__
해서는안다다안o로로 설정하면 안 됩니다.__str__
무조건적으로__repr__
표현을 만들어야 합니다. 이 표현은 동일한 값을 가진 개체를 다시 만드는 데 사용될 수 있는 유효한 Python 식처럼 보여야 합니다.이 경우에는 차라리 이 사건이Node(2)
2
.
의 의 적절한 이행__repr__
개체를 다시 만들 수 있습니다.예에서는이과은른한도야다는다야e,n이ncoerts는,dtes과한은른 등neighours
그리고.distance
.
불완전한 예:
class Node:
def __init__(self, id, neighbours=[], distance=0):
self.id = id
self.neighbours = neighbours
self.distance = distance
def __str__(self):
return str(self.id)
def __repr__(self):
return "Node(id={0.id}, neighbours={0.neighbours!r}, distance={0.distance})".format(self)
# in an elaborate implementation, members that have the default
# value could be left out, but this would hide some information
uno = Node(1)
due = Node(2)
tri = Node(3)
qua = Node(4)
print uno
print str(uno)
print repr(uno)
uno.neighbours.append([[due, 4], [tri, 5]])
print uno
print uno.neighbours
print repr(uno)
참고:print repr(uno)
Δ Δ Δ Δ Δ Δ ΔΔ Δ Δ Δ Δ Δ Δ Δ Δ__eq__
그리고.__ne__
아니면__cmp__
개체를 다시 만들고 동일성을 확인할 수 있습니다.
, __str__
용을 합니다.repr
그들의 내용물이 아니라str
. 그래서 당신은 사용할 수 있습니다.__repr__
에 대신에__str__
으로 ID 하는 을 를 으로 하는 을 를 .
__str__
개체에 문자열 표현이 필요한 경우에만 호출됩니다.
를 들어 str(uno)
,print "%s" % uno
아니면print uno
하지만 또 다른 마법의 방법이 있습니다.__repr__
이것은 물체의 표현입니다.개체를 문자열로 명시적으로 변환하지 않으면 표현이 사용됩니다.
.uno.neighbors.append([[str(due),4],[str(tri),5]])
당신이 기대하는 대로 해줄 겁니다
클래스의 경우, 그리고 클래스 내의 일부 값과 동일한 글로벌 변수를 설정하는 경우, 글로벌 변수가 저장하는 것은 실제로 해당 값이 저장된 메모리 위치에 대한 참조입니다.
출력물에서 볼 수 있는 것은 이를 보여줍니다.
str 메서드와 인쇄가 작동하는 방식 때문에 사용한 초기 전역 변수에서 값을 보고 인쇄를 문제없이 사용할 수 있는 경우 목록에서는 이 작업을 수행할 수 없습니다. 왜냐하면 목록 내의 요소에 저장된 것은 값의 메모리 위치를 참조하는 것일 뿐이기 때문입니다. 별칭에서 읽습니다.더 알고 싶다면요
또한 목록을 사용하고 별칭이 무엇이고 무엇이 아닌지 추적할 수 없을 때 별칭 목록에서 변경하면 원래 목록 요소의 값이 변경되는 것을 발견할 수 있습니다. 왜냐하면 목록 요소를 목록 또는 목록 내의 요소와 동일하게 설정하면새 목록은 메모리 위치에 대한 참조만 저장합니다(실제로 해당 새 변수에 특정한 새 메모리 공간을 만들지는 않습니다).여기에 딥카피가 도움이 됩니다!
활자로 찍어내다self.id.__str__()
당신에게 도움이 되지는 않겠지만요
당신의.__str__
방법은 프로그램이 개발될 때 그리드나 구조 표현을 출력하고 싶다고 말할 때 더 유용할 것입니다.
print self._grid.__str__()
def __str__(self):
"""
Return a string representation of the grid for debugging.
"""
grid_str = ""
for row in range(self._rows):
grid_str += str( self._grid[row] )
grid_str += '\n'
return grid_str
언급URL : https://stackoverflow.com/questions/12448175/confused-about-str-on-list-in-python
'programing' 카테고리의 다른 글
mariadb에서 정수를 이진으로 캐스트하는 방법 (0) | 2023.09.07 |
---|---|
"해시태그"를 사용하는 앱의 데이터베이스 설계 (0) | 2023.09.07 |
MySQL SELECT x from a where not in (b에서 x 선택) - 예기치 않은 결과 (0) | 2023.09.07 |
소문자를 대문자로 변경하는 MySql 쿼리 (0) | 2023.09.07 |
페이지 온로드 시 자바스크립트 아약스 호출 (0) | 2023.09.07 |