Python: コンストラクタのオーバーロード
・パラメータの型によって挙動を変える
class Widget():
def __init__(self, arg):
if isinstance(arg, int): print arg * 10
elif isinstance(arg, basestring): print arg + '0'
Widget(1234) # 12340
Widget('1234') # 12340
・パラメータの数によって挙動を変える
class Widget():
def __init__(self, *args):
if len(args) == 1: print '1 arg.'
elif len(args) == 2: print '2 args.'
Widget(1) # 1 arg.
Widget(1, 2) # 2 args.
・個数と型を両方チェック
class Widget():
def __init__(self, *args):
def check(*types):
if len(args) != len(types): return False
for i, arg in enumerate(args):
if not isinstance(arg, types[i]): return False
return True
if check(int): print args[0]
elif check(int, int, basestring): print args[2]
else: print 'other'
Widget(1) # 1
Widget(1, 2, '3') # 3
Widget('3') # other
0 件のコメント:
コメントを投稿