class Base:
def __init__(self, **kwargs):
# itera em uma cópia dos items do dicionário,
# permitindo que ele seja alterado durante o "for":
for name, value in list(kwargs.items()):
# Verifica se o parâmetro existe na própria classe,
# caso contrário, mantem o mesmo no dicionário.
if not hasattr(self, name):
continue
if not isinstance(value, getattr(self, name)):
raise TypeError("Incorrect parameter type passed for {}. An '{}' was expected.".format(
self.__name__, getattr(self, name).__name__))
setattr(self, name, value)
del kwargs[name]
class Pessoa(Base):
def __init__(self, kwargs):
self.nome = str
self.idade = int
self.endereco = dict
super(Pessoa, self).__init__(**kwargs)
params = { "nome": "Lol", "idade": 30, "endereco": { "logradouro": "rua longe pra cacete", "numero": "300" } }
p = Pessoa(params)
print(p.nome, p.idade)
Y2xhc3MgQmFzZToKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAKICAgICAgICAjIGl0ZXJhIGVtIHVtYSBjw7NwaWEgZG9zIGl0ZW1zIGRvIGRpY2lvbsOhcmlvLCAKICAgICAgICAjIHBlcm1pdGluZG8gcXVlIGVsZSBzZWphIGFsdGVyYWRvIGR1cmFudGUgbyAiZm9yIjoKICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbGlzdChrd2FyZ3MuaXRlbXMoKSk6CiAgICAgICAgICAgICMgVmVyaWZpY2Egc2UgbyBwYXLDom1ldHJvIGV4aXN0ZSBuYSBwcsOzcHJpYSBjbGFzc2UsCiAgICAgICAgICAgICMgY2FzbyBjb250csOhcmlvLCBtYW50ZW0gbyBtZXNtbyBubyBkaWNpb27DoXJpby4KICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgZ2V0YXR0cihzZWxmLCBuYW1lKSk6CiAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkluY29ycmVjdCBwYXJhbWV0ZXIgdHlwZSBwYXNzZWQgZm9yIHt9LiBBbiAne30nIHdhcyBleHBlY3RlZC4iLmZvcm1hdCgKICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLCBnZXRhdHRyKHNlbGYsIG5hbWUpLl9fbmFtZV9fKSkKICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCB2YWx1ZSkKICAgICAgICAgICAgZGVsIGt3YXJnc1tuYW1lXQoKCmNsYXNzIFBlc3NvYShCYXNlKToKICAgIAogICAgZGVmIF9faW5pdF9fKHNlbGYsIGt3YXJncyk6CiAgICAgICAgc2VsZi5ub21lID0gc3RyCiAgICAgICAgc2VsZi5pZGFkZSA9IGludAogICAgICAgIHNlbGYuZW5kZXJlY28gPSBkaWN0CiAgICAgICAgCiAgICAgICAgc3VwZXIoUGVzc29hLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKICAgIApwYXJhbXMgPSB7ICJub21lIjogIkxvbCIsICJpZGFkZSI6IDMwLCAiZW5kZXJlY28iOiB7ICJsb2dyYWRvdXJvIjogInJ1YSBsb25nZSBwcmEgY2FjZXRlIiwgIm51bWVybyI6ICIzMDAiIH0gfQoKcCAgPSBQZXNzb2EocGFyYW1zKQoKcHJpbnQocC5ub21lLCBwLmlkYWRlKQ==