new_contents: ## https://stackoverflow.com/questions/5824881/python-call-special-method-practical-example
  class Factorial:
      def __init__(self):
          self.cache = {}
      def __call__(self, n):
          if n not in self.cache:
              if n == 0:
                  self.cache[n] = 1
              else:
                  self.cache[n] = n * self.__call__(n-1)
          return self.cache[n]
  
  fact = Factorial()
  for i in xrange(10):                                                             
      print("{}! = {}".format(i, fact(i)))
  
  # output
  '''
  0! = 1
  1! = 1
  2! = 2
  3! = 6
  4! = 24
  5! = 120
  6! = 720
  7! = 5040
  8! = 40320
  9! = 362880
  '''
  
subject: Create FactorilaMemoization__call__.py