首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python2.7:带有OrderedDict属性的继承错误<myclass>类没有属性'_OrderedDict__root‘

Python2.7:带有OrderedDict属性的继承错误<myclass>类没有属性'_OrderedDict__root‘
EN

Stack Overflow用户
提问于 2018-08-21 17:58:27
回答 1查看 33关注 0票数 1

我正在尝试使用Python2.7.10编写一个继承自OrderedDict的python类。

最基本的类如下所示:

代码语言:javascript
复制
from collections import OrderedDict

class Game (OrderedDict):

  def __init__(self,theTitle="",theScore=0):
    self['title'] = theTitle
    self['score'] = theScore


  def __str__(self):
    return "hi"
    #return 'title: ' + self['title'] + ", score:" + str(self['score'])

当我运行它时,我得到这个错误:

代码语言:javascript
复制
 (metacrit) Jasons-MBP:mc jtan$ python
Python 2.7.10 (default, Oct  6 2017, 22:29:07) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from game import Game
>>> g = Game('battlezone',100)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "game.py", line 7, in __init__
    self['title'] = theTitle
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/collections.py", line 64, in __setitem__
    root = self.__root
AttributeError: 'Game' object has no attribute '_OrderedDict__root'
>>>

有人能告诉我我哪里做错了吗?我非常确定OrderedDict在这个版本的Python中,这是我认为的第一件事,但我还不确定要去哪里。到目前为止,我还不是python原生用户。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 18:16:30

您忘记了初始化基类。在您的代码中,__init__仅初始化Game元素,而无法初始化底层OrderedDict。必须显式调用基类__init__方法:

代码语言:javascript
复制
class Game (OrderedDict):

  def __init__(self,theTitle="",theScore=0):
    OrderedDict.__init__(self)    
    self['title'] = theTitle
    self['score'] = theScore


  def __str__(self):
    return "hi"
    #return 'title: ' + self['title'] + ", score:" + str(self['score'])

然后,您可以成功地执行以下操作:

代码语言:javascript
复制
>>> g = Game('battlezone',100)
>>> g
Game([('title', 'battlezone'), ('score', 100)])
>>> str(g)
'hi'

由于__repr__尚未被覆盖,因此您可以看到OrderedDict表示。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51946149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档