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
tuple
和之间的性能比较list
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
这清楚地表明,将 alist
作为参数传递的速度非常慢tuple
,几乎可以忽略不计,并且它们的性能几乎相等。