8

我经常使用 Python 而不是伪代码。为此,我想要一个堆栈。我知道使用列表是要走的路(source),但我想使用myList.push而不是myList.append明确我使用堆栈。

我以为我可以做一些简单的事情,比如

myList.push = myList.append

为附加操作定义别名,但我得到

    stack.push = stack.append
AttributeError: 'list' object has no attribute 'push'

是否存在将推送操作添加到列表的简短解决方案?

(它不应该弄乱我可运行的 Python 伪代码)

4

4 回答 4

16

您可以像这样创建列表的子类:

class List(list):
    def push(self, x):
        self.append(x)

像使用常规列表一样使用自定义类:

>>> s = List()
>>> s.push(10)
>>> s.push(20)
>>> s
[10, 20]
于 2012-08-07T07:29:05.767 回答
5

与其重新定义,不如给同一个函数起别名?

class List(list):
    def __init__(self):
        self.push = self.append

这也将保留附加的功能。

于 2012-08-07T07:56:28.637 回答
2
>>> a = []
>>> push  = a.append
>>> push(1)
>>> a
[1]
>>> 
于 2012-08-07T08:28:02.517 回答
1
>>> stack = type('stack', (list,), {'push':list.append})()
>>> stack.push(1)
>>> stack.pop()
1
>>>
于 2017-04-19T04:22:38.250 回答