9.24.2011

Overloading constructor in Python

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 件のコメント:

コメントを投稿