跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Python 遇到一个列表问题,感觉很奇怪,也不知道怎么 Google,希望老哥们帮忙看看
未分類
13 1 月 2021

Python 遇到一个列表问题,感觉很奇怪,也不知道怎么 Google,希望老哥们帮忙看看

Python 遇到一个列表问题,感觉很奇怪,也不知道怎么 Google,希望老哥们帮忙看看

資深大佬 : wangyzj 0

环境为 python3.5,ubuntu1604 看到一个库中对 list 做了继承 代码大意如下

在看前人代码的时候发现对方使用 NewList([1,2,3], 3)[‘total’]这类语法获得正确输出 但 l = NewList([1,2,3], 3)后 l.total 是正确输出的 l[‘total’]是报错得:list indices must be integers or slices 不知道应该怎么解释这种情况

class NewList(list):      def __init__(self, iterable=None, _total=0):         if iterable is not None:             list.__init__(self, iterable)         else:             list.__init__(self)          self.total = _total          self.iterable = iterable or []      next = __next__ 

大佬有話說 (9)

  • 資深大佬 : geebos

    我试了一下,第一种也是报错的

  • 主 資深大佬 : wangyzj

    @geebos #1 可能是我的 sample 不准确吧,不过我也没发现其他关键的点
    但我的确遇到了这种问题,很奇怪
    理论上报错是对的

  • 資深大佬 : ManjusakaL

    你试一下

    “`python
    a = list()
    a[‘total’]
    “`

    不就懂了。。

    要理解的更清楚去背诵一下 Python Document 中 Language Reference Chap 3 Data Model 这章你就懂了

  • 資深大佬 : skinny

    你这既不是 mapping 对象也没有实现自己的__getitem__方法当然会报错,tutorial 多读几遍……

  • 資深大佬 : chenqh

    感觉是复写了 __getitem__, .的写法需要 override __getattr__吧

  • 資深大佬 : nthhdy

    > 在看前人代码的时候发现对方使用 NewList([1,2,3], 3)[‘total’]这类语法获得正确输出

    不应该吧,再读读,真实运行一下。看是不是理解有误。如果这里的 NewList 真是像贴出来的代码这样定义的,这个表达式同样会报错的。

  • 主 資深大佬 : wangyzj

    @nthhdy #6 但是如果有了 getitem 实现的话不应该单独赋值一个新的 var 后执行[‘total’]报错

  • 資深大佬 : zhanglintc

    想想不应该会发生这种现象啊, 无论 `NewList()` 产生的对象是否赋值给 `l`, 它都是同一个类型的 `NewList` 对象, 不应该影响它的属性调用方式什么的.

    如果你给的例子的输出的确没有问题的话, 那这倒是个挺有意思的问题. 主可以再运行下贴点结果证明的确是这个现象么.

  • 資深大佬 : nthhdy

    @wangyzj 你贴的实现没有 `__getitem__` 方法,就会用 list 的该方法,但是 list 下标不能接受字符串,抛出这个异常很正常。就像对 `[][‘a’]` 进行求值抛出的异常一样。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具