Имейте в виду, что # 1 на самом деле невозможно в Python. Некоторые инструменты делают это, но всегда есть существенные ограничения. Рассмотрим этот код:
if foo():
bar = "quux"
else:
bar = [42]
Теперь, когда вы наберете bar.
в следующей строке, какие методы следует предложить? Те для строк, или те для списков? И это только верхушка айсберга.