估计是我问题没有描述清楚,这样吧,直接上代码:
class Mylist:
def __init__(self):
self._mylist=list()
def __len__(self):
return len(self._mylist)
def add(self,value):
return self._mylist.append(value)
我自己模仿list的行为。写了一个基本的list,名字叫Mylist,并给他一个add方法用来添加其中的元素,添加完之后,我想输出其中的内容,然后我使用:
list1=Mylist()
list1.add(1)
list1.add(2)
print(list1)
我以为print会显示出list1中的每一项,但是发现实际没有,显示的为:
<__main__.Mylist object at 0x0071A470>
怎么样能让print(list1)显示出的结果和真实list类型一样呢?例如:
[1,2]
__str__具体怎么实现,貌似这个只能为str类型,int不行,而且我发现在pycharm 里面写的时候,提示__str__方法“overrides method in object”
자신만의 클러스터 데이터를 생성하기 위해 "집계" 방법을 사용하고 있습니다. 이때 위임은 간단한 방법입니다.
으아아아__str__
은 Python 클래스의 특수 메서드입니다. 반환 값은str(x)
을 사용하여 얻은 값이며,print(x)
은 실제로print(str(x))
과 같습니다. 사실 더 자세히 말하면str(x)
을 호출하면 실제로는x.__str__()
을 호출하게 됩니다.즉, 다음과 같이 상상해 볼 수 있습니다.
일반적으로 사용자 정의 클래스의 경우
__str__
메서드의 반환 값은 기본 문자열입니다. 예를 들어<__main__.Mylist object at 0x0071A470>
은 네임스페이스, 클래스 이름 및 위치를 설명하는 데 사용됩니다.__str__
의 반환 값을 변경하려면 덮어써야 합니다.여기서는
__str__
의 반환 값을MyList
클래스에 집계된 목록의__str__
값으로 지정하여__str__
의 출력이 위임을 통해 목록과 동일하도록 합니다.클래스에서 이런 종류의 메소드(일반적으로 매직 메소드 또는 특수 메소드로 알려져 있음)를 추가하고 싶습니다. 이중 밑줄로 시작하여 이중 밑줄로 끝나는 , 정식 이름은 "dunder" method",
__str__
의 경우 "dunder string"으로 발음할 수 있습니다.우선 혼동하지 마세요. 우리가 사용하는
인쇄 내용은 모두문자열
으아아아 을 인쇄할 때 Python은 인쇄할 데이터 유형 리터럴과 유사한(또는 심지어 정확히 동일한) 문자열을 생성합니다.print
이지만, 을 보면 실제로는 입니다. 여러 데이터 유형(또는 우리가 재정의한 클래스[1, 2]
)은 데이터 유형의 특성을 가진 문자열을 출력하는 방법을 찾을 것입니다(보통 이러한 데이터를 생성할 때 사용하는 "리터럴"에 매우 가깝습니다).'[1, 2]'
__str__
예를 들어 리터럴을 사용하여 목록을 생성합니다.으아아아
는 목록에 있는 요소의 유형을 변경하지 않고 해당 특성이 있는 "문자열"만 반환 값으로 사용합니다.lst
그래서 여기서str(list)
둘째, Python 셸(Python의 대화형 인터페이스)에서 변수 이름만 사용하여만으로는 충분하지 않으며
결과Mylist
:__str__
을 재정의해야 합니다. 으아아아__repr__
: 으아아아
으아아아
클래스에 __str__ 함수를 구현하고 출력하고 싶은 내용을 작성하세요
으아아아예를 들어
print 함수는 객체의 __str__ 메서드를 호출합니다. __str__ 메서드를 직접 다시 구현하지 않은 경우 기본적으로 상위 클래스에서 상속된 __str__ 메서드가 사용되므로 출력이 반드시 다음 형식일 필요는 없습니다. .
으아악