【问题标题】:Instance has no attribute - Deque Library实例没有属性 - Deque 库
【发布时间】:2015-09-09 00:30:54
【问题描述】:

我正在尝试使用双端队列库(来自集合)中的方法。但我收到错误“MyQueue 实例没有属性‘追加’”。但我确信双端队列有一个“附加”方法。是什么导致了这个错误?

import copy
from collections import deque

class MyQueue:
    def __init__(self):
        self = deque()
    def push(self, val):
        self.append(val)

【问题讨论】:

    标签: python class collections attributes queue


    【解决方案1】:

    您也可以通过使用您的MyQueue 包装一个deque 实例来做到这一点:

    from collections import deque
    
    
    class MyQueue(object):
        def __init__(self, *args, **kwargs):
            self._queue = deque(*args, **kwargs)
    
        def push(self, value):
            self._queue.append(value)
    
        def pop(self):
            return self._queue.pop()
    

    如果您想在内部使用deque,但有兴趣提供与deque 已经提供的接口相比简化的接口,这将是一个好方法。

    【讨论】:

      【解决方案2】:

      你可以通过继承deque来做到这一点:

      from collections import deque
      
      
      class MyQueue(deque):
          def push(self, val):
              self.append(val)
      

      然后可以这样使用:

      >>> q = MyQueue()
      >>> q.push(5)
      >>> q
      deque([5])
      

      有关 Python 中的类和继承的更多信息,请参阅Python tutorial

      【讨论】:

      • 谢谢。有没有办法在不改变 MyQueue 规范的情况下做到这一点?
      • @Essam 我不确定我是否完全理解你的意思。您能更具体地说明您要做什么吗?
      • 我试图保持“class MyQueue()”的原样。我可以在 init 或 push 的定义中更改什么以使其工作,或者子类化 MyQueue 是唯一的方法吗?
      • @Essam 你可以包装一个deque 实例,然后提供你想要的任何方法接口。我会将其添加为单独的答案。
      猜你喜欢
      • 2016-06-29
      • 2012-10-07
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 2014-04-05
      • 2014-03-14
      相关资源
      最近更新 更多