fork download
  1. class Base:
  2.  
  3. def __init__(self, **kwargs):
  4.  
  5. # itera em uma cópia dos items do dicionário,
  6. # permitindo que ele seja alterado durante o "for":
  7. for name, value in list(kwargs.items()):
  8. # Verifica se o parâmetro existe na própria classe,
  9. # caso contrário, mantem o mesmo no dicionário.
  10. if not hasattr(self, name):
  11. continue
  12. if not isinstance(value, getattr(self, name)):
  13. raise TypeError("Incorrect parameter type passed for {}. An '{}' was expected.".format(
  14. self.__name__, getattr(self, name).__name__))
  15. setattr(self, name, value)
  16. del kwargs[name]
  17.  
  18.  
  19. class Pessoa(Base):
  20.  
  21. def __init__(self, kwargs):
  22. self.nome = str
  23. self.idade = int
  24. self.endereco = dict
  25.  
  26. super(Pessoa, self).__init__(**kwargs)
  27.  
  28. params = { "nome": "Lol", "idade": 30, "endereco": { "logradouro": "rua longe pra cacete", "numero": "300" } }
  29.  
  30. p = Pessoa(params)
  31.  
  32. print(p.nome, p.idade)
Success #stdin #stdout 0.01s 28384KB
stdin
Standard input is empty
stdout
Lol 30