在python中自己写的数据类型使用print无法输出每个元素
PHP中文网
PHP中文网 2017-04-17 17:43:30
0
4
1387

估计是我问题没有描述清楚,这样吧,直接上代码:

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”

PHP中文网
PHP中文网

认证0级讲师

모든 응답(4)
洪涛

자신만의 클러스터 데이터를 생성하기 위해 "집계" 방법을 사용하고 있습니다. 이때 위임은 간단한 방법입니다.

으아아아

__str__은 Python 클래스의 특수 메서드입니다. 반환 값은 str(x)을 사용하여 얻은 값이며, print(x)은 실제로 print(str(x))과 같습니다. 사실 더 자세히 말하면 str(x)을 호출하면 실제로는 x.__str__()을 호출하게 됩니다.

즉, 다음과 같이 상상해 볼 수 있습니다.

print(x) === print(str(x)) === print(x.__str__())

일반적으로 사용자 정의 클래스의 경우 __str__ 메서드의 반환 값은 기본 문자열입니다. 예를 들어 <__main__.Mylist object at 0x0071A470>은 네임스페이스, 클래스 이름 및 위치를 설명하는 데 사용됩니다. __str__의 반환 값을 변경하려면 덮어써야 합니다.

여기서는 __str__의 반환 값을 MyList 클래스에 집계된 목록의 __str__ 값으로 지정하여 __str__의 출력이 위임을 통해 목록과 동일하도록 합니다.


클래스에서 이런 종류의 메소드(일반적으로 매직 메소드 또는 특수 메소드로 알려져 있음)를 추가하고 싶습니다. 이중 밑줄로 시작하여 이중 밑줄로 끝나는 , 정식 이름은 "dunder" method", __str__의 경우 "dunder string"으로 발음할 수 있습니다.

아래 댓글로 질문하신 내용에 답변해드리겠습니다.

우선 혼동하지 마세요. 우리가 사용하는

인쇄 내용은 모두

문자열 print이지만, 을 보면 실제로는 입니다. 여러 데이터 유형(또는 우리가 재정의한 클래스[1, 2])은 데이터 유형의 특성을 가진 문자열을 출력하는 방법을 찾을 것입니다(보통 이러한 데이터를 생성할 때 사용하는 "리터럴"에 매우 가깝습니다). '[1, 2]' __str__예를 들어 리터럴을 사용하여 목록을 생성합니다.

으아아아

을 인쇄할 때 Python은 인쇄할 데이터 유형 리터럴과 유사한(또는 심지어 정확히 동일한) 문자열을 생성합니다.

으아아아 lst그래서 여기서

는 목록에 있는 요소의 유형을 변경하지 않고 해당 특성이 있는 "문자열"만 반환 값으로 사용합니다.

str(list)둘째, Python 셸(Python의 대화형 인터페이스)에서 변수 이름만 사용하여

을 나타내는 문자열을 표시하려면

만으로는 충분하지 않으며 Mylist:__str__을 재정의해야 합니다. 으아아아 __repr__

결과

: 으아아아

洪涛

으아아아

大家讲道理

클래스에 __str__ 함수를 구현하고 출력하고 싶은 내용을 작성하세요
예를 들어

으아아아
迷茫

print 함수는 객체의 __str__ 메서드를 호출합니다. __str__ 메서드를 직접 다시 구현하지 않은 경우 기본적으로 상위 클래스에서 상속된 __str__ 메서드가 사용되므로 출력이 반드시 다음 형식일 필요는 없습니다. .

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿