gpt4 book ai didi

python - 将元组继承为列表

转载 作者:太空狗 更新时间:2023-10-30 02:32:12 25 4
gpt4 key购买 nike

我正在编写一个程序,其中有一个继承自 tuple 的类。但是,当我将参数作为列表传递时,它仍然有效。这是我的一些代码:

class Board(tuple):    
def __init__(self, tup):
print(type(tup))
super().__init__()

board = Board([[Cell(False) for i in range(10)] for j in range(10)])
print(type(board))

然后这个程序输出:

<class 'list'>
<class '__main__.Board'>

我的问题如下:当我说要传递一个元组时,为什么Python让我传递一个list作为参数?

最佳答案

def __init__(self, tup):

就像其他函数一样。您已经为 tup 参数传递了一个列表。 没有办法在 python 中限制参数的类型。子类化 tuple 只是意味着您从 tuple 继承属性,而不是它只能接受元组作为参数。

编辑:如果您出于某种原因非常想要一种方法来确保只接受元组。你可以像这样引发异常

class Board(tuple):
def __init__(self, tup):
if not isinstance(tup, tuple):
raise TypeError("Constrcutor argument to Board should be a tuple")
super().__init__()

print Board([1, 2])

输出

TypeError: Constrcutor argument to Board should be a tuple

tuplelist性能比较

class Board(tuple):
def __init__(self, tup):
for i in tup:
pass
myList, myTuple = range(10), tuple(xrange(10))

from timeit import timeit
print timeit("Board(myList)", "from __main__ import myList, Board", number = 1000000)
print timeit("Board(myTuple)", "from __main__ import myTuple, Board", number = 1000000)

输出

0.44806599617
0.413192987442

这清楚地表明将 list 作为参数传递比 tuple 稍微慢一点,几乎可以忽略不计,而且它们在性能上几乎相等。

关于python - 将元组继承为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19637353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com