你是用的是 "聚合" 的方式來建立自己的群集資料,這時候透過委託是個簡單的方法:

class Mylist:

def __init__(self):

self._mylist=list()

def __len__(self):

return len(self._mylist)

def add(self,value):

return self._mylist.append(value)

def __str__(self):

return str(self._mylist)

__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> 用以說明 namespace, class name 和位置.如果要改變 __str__ 的回傳值,我們必須要覆寫他.

這邊我們讓 __str__ 的回傳值為 MyList 類中聚合的 list 的 __str__值,這樣就透過委託的方式讓 __str__ 的輸出跟 list 一樣了.

多嘴補充一下,這種在 class 裡面 以雙底線開頭且以雙底線結尾 的 method (俗名叫做魔術方法或是特殊方法),有個正式名稱叫做 "dunder method",對於 __str__,我們可以唸作 "dunder string".

The frequent use of a double underscores in internal identifiers in Python gave rise to the abbreviation dunder; this was coined by Mark Jacksonand independently by Tim Hochberg, within minutes of each other, both in reply to the same question in 2002. --wiki

下方評論問的問題我回答在這裡.

首先是不要被混淆,我們利用 print 印出來的內容都是 字串,即便你看到 [1, 2] 其實這也是一個字串 '[1, 2]',只不過內建的幾種資料型態(或我們有覆寫過 __str__ 的 class) 會想辦法輸出一個帶有該資料型態特徵的字串(通常會非常接近我們產生這些資料時所用的"字面").

舉例,我們使用字面產生一個 list:

lst = [1, 2]

當我們打印 lst 時,Python 是會製造一個長得像該資料型態字面(甚至一模一樣)的字串讓你印出.

print(lst)

[1, 2] # 其實這是個字串,但是 lst 還是 list!

所以在這裡 str(list) 並沒有改變 list 中元素的 type,只不過將帶有其特徵的 "字串" 當成回傳值.

其次,如果想要在 Python shell (Python的互動介面)中能夠只利用變數名稱就展示用來表示 Mylist 的字串,光是 __str__ 還不夠,這必須要覆寫 __repr__:

class Mylist:

def __init__(self):

self._mylist=list()

def __len__(self):

return len(self._mylist)

def add(self,value):

return self._mylist.append(value)

def __str__(self):

return str(self._mylist)

def __repr__(self):

return str(self)

結果:

\>>> from test import Mylist

\>>> lst = Mylist()

\>>> lst.add(1)

\>>> lst.add(2)

\>>> lst

[1, 2]

在python中print表示的数据类型是_在python中自己写的数据类型使用print无法输出每个元素...相关推荐

  1. 在python中print表示的数据类型是_【Python连载】那些必须掌握的Python数据类型

    原标题:[Python连载]那些必须掌握的Python数据类型 经过近几年的发展,Python已成为了数据科学和机器学习的首选语言,许多人也因此开始走上自学python之路.从今天开始,本公众号将陆续 ...

  2. python中的打印是什么意思_对python:print打印时加u的含义详解

    对python:print打印时加u的含义详解 u:表示unicode字符串 不是仅仅是针对中文, 可以针对任何的字符串,代表是对字符串进行unicode编码. 一般英文字符在使用各种编码下, 基本都 ...

  3. python中print()的作用是什么_在python中最常见的:print的真正用法

    一.print()函数概述 print() 方法用于打印输出,是python中最常见的一个函数. 该函数的语法如下: print(*objects, sep=' ', end='\n', file=s ...

  4. python数字类型的分类和区别_讨论python的数据类型的区别

    python很重要的的那几个数据类型:字符串,列表,字典,元组,他们之间重要的区别的是什么?能否举几个例子来说明下! 共同点: 1.它们都是py的核心类型,是py语言自身的一部分. 核心类型与非核心类 ...

  5. python显示3位数不够0补位_关于Python开发中的那些坑总结,令人防不胜防,建议收藏!...

    在学习 Python 的过程中,我为它的简洁优雅而痴迷,但它又是如此的调皮,在提供了很多舒服的功能特性之外,又悄悄挖了很多带有迷惑性的坑,令人防不胜防- 人不能两次踏入同一条河流,在无数次踩进同样的坑 ...

  6. 在python中定义类时、运算符重载_自定义 Python 类中的运算符和函数重载(上)...

    如果你对 Python 中的str对象使用过 + 或 * 运算符,你一定注意到了它的操作与 int 或 float 类型的区别: 你可能想知道同一内置运算符或函数如何对不同类对象进行不同操作的.这分别 ...

  7. python动态更新窗口上的图片_基于Python实现matplotlib中动态更新图片(交互式绘图)...

    最近在研究动态障碍物避障算法,在Python语言进行算法仿真时需要实时显示障碍物和运动物的当前位置和轨迹,利用Anaconda的Python打包集合,在Spyder中使用Python3.5语言和mat ...

  8. python实现单例模式的几种方式_基于Python中单例模式的几种实现方式及优化详解...

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  9. python中颜色介意用数字表示_利用Python实现颜色色值转换的小工具

    先看看Zeplin 的颜色色值显示示例 原有处理方式 因为我会 Python (仅限于终端输入 python 然后当做计算器算,或者用 hex() 函数把十进制转换成十六进制),所以遇到这样的问题我当 ...

  10. python里面列表可以同时删除吗_在python中从列表中删除项,同时对其进行迭代

    本问题已经有最佳答案,请猛点这里访问. 我正在为锦标赛应用程序编写循环算法. 当玩家数量为奇数时,我将'DELETE'添加到玩家列表中,但稍后,当我想从包含'DELETE'的日程表列表中删除所有项目时 ...

最新文章

  1. php基础:switch cass控制结构 代替if
  2. linux solusos 软件包管理工具 eopkg 简介
  3. Design Pattern IDisposable Pattern C
  4. Acwing145. 超市[C++题解]:贪心
  5. DCMTK:表示基于文件系统的基本工作列表管理服务类提供程序的控制台引擎的类
  6. HDLBits答案(3)_Verilog模块的例化与调用
  7. 1.0jpa 2.0_在JPA 2.1中使用@Convert正确完成映射枚举
  8. 基于图查询系统的图计算引擎
  9. 20-190-092-安装-Flink集群安装 flink-1.9.0 On Yarn
  10. tastypie使用cache对list data无效问题
  11. 科大讯飞刘聪:如何持续保持语音识别技术的领先
  12. 牛客竞赛,ZUST第17届公开赛,摸鱼记(A、DEFGH、J题解,3/7题代码)
  13. 数据包接收系列 — 上半部实现(网卡驱动)
  14. 浅谈Mysql底层索引原理
  15. python拉格朗日插值法_Python 实现拉格朗日插值
  16. 计算机it是什么,IT是什么意思
  17. Pylab Plotting
  18. vue导入处理Excel表格详解
  19. 使用CMake构建/开始使用CMake
  20. 谷歌关键词是怎么排名的?google关键词优化

热门文章

  1. 四则运算界面版 结对子
  2. 运行QTP测试脚本后,将编译结果写入指定文件(四)
  3. 反激变换器matlab仿真变压器demo,反激变换器建模Matlab仿真
  4. mybatis自增主键回填
  5. python连接池 commit,连接池请求Python
  6. c语言乘法除法结合律,有关C语言运算符优先级和结合律的思考
  7. python内置函数程序_Python入门,一定要吃透这69个内置函数
  8. javq接口_java中什么是接口?接口的作用是什么?
  9. 【转】vue中如何实现数据的双向绑定
  10. WPF控件获得焦点时去除虚线框