[備忘録][Python]__call__, 無名関数の可変引数とか。

無性に、「むしゃくしゃしたからやった。後悔はしていない」というコードを書きたくなったので書いた。

主な目的

  • __call__メソッドの探求。そしてクラスインスタンスを関数として使う。
  • setattrに慣れる。
  • lambda関数で可変引数が使えるか試す。
  • 三項演算子を思い出す。
  • 文化に反して汚く書く。
class Func:
    pass

Func.__call__ = lambda self, *args: args if bool(len(args)) else self

# 上に同じ。
#setattr(Func, '__call__', lambda self, *args: args if bool(len(args)) else self)

# 上に同じクラスで表すと下記の通り。
#class Func:
#  def __call__(self, *args):
#    if bool(len(args)):
#    	return args
#    else
#    	return self

# 実際に実行
func_instance = Func()

func_instance
#=><__main__.Func instance at 0x37fc10>

func_instance()
#=><__main__.Func instance at 0x37fc10>

func_instance()("spam")
#=>('spam',)

func_instance()()("spam")
#=>('spam',)

感想

  • すっきりした。
  • 意外と汚く書けなかった。