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
这清楚地显示传递一个
list
作为参数比
tuple
稍微慢一点,但几乎可以忽略不计,它们的性能几乎相等。
tuple([])
是有效的一样,Board([])
也是有效的(对于任何列表,不仅仅是空列表)。 - chepner