Ответ 1
Python определяет, будет ли __ new __() вызывать __init __():
Если __new __() возвращает экземпляр cls, то новый экземпляр __init __() будет вызываться как __init __ (self [,...]), где self - это новый экземпляр, а остальные аргументы такие же, как и были переданы __new __().
__ init __() не будет вызываться, если __new __() переопределен и не возвращает экземпляр класса.
__ вызов __() вызывается, когда объект экземпляра вызывается как функция:
class MyObj:
def __call__():
print 'Called!'
>>> mo = MyObj()
>>> mo()
Called!
И, конечно же, вы можете определить __call __() с любыми аргументами и логикой, которые вы хотите.