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
a をパラメーターとして渡すことが、よりわずかに遅くtuple
、ほとんど無視できることを示しており、パフォーマンスはほぼ同じです。