@Marcos Paulo vamos um pouco de começo.
Python é uma linguagem interpretada, não compilada. Certo? Assim, tipo de variável pode ser alterado durante execução de programa. Imaginamos, que Python durante execução de código encontra uma linha:
c = a + b .
Tipos de "a" e "b" não são dados. Eles são determinados pelo código já executado, mas ele pode ser bem comprido e sofisticado (difÃcil para analisar algoritmicamente de baixo para cima - pelo lado contrario da execução).
A pergunta é: O que faz Python com linha
c = a +b ?
Executa alguma regra "somar"? Qual é essa regra "somar"? Onde essa regra está definida?