class CarModel:
mapping = { }
@ staticmethod
def _key( key, mapping= mapping) :
def decorator( func) :
mapping[ key] = func
return decorator
@ classmethod
def from_dict( cls, d: dict ) :
instance = cls( )
for key, value in d.items ( ) :
cls.mapping [ key] ( instance, value)
return instance
def __init__ ( self ) :
self .__wheel_count: int = 0
@ _key( 'wheelCount' )
def set_wheel_count( self , value: int ) -> None :
self .__wheel_count = value
class TruckModel( CarModel) :
def __init__ ( self ) :
super ( ) .__init__ ( )
self .__load_in_kg: int = 0
@ CarModel._key( 'loadInKg' )
def set_load_in_kg( self , value: int ) -> None :
self .__load_in_kg= value
print ( vars ( CarModel.from_dict ( { 'wheelCount' : 4 } ) ) )
print ( vars ( TruckModel.from_dict ( { 'wheelCount' : 6 , 'loadInKg' : 8000 } ) ) )
Y2xhc3MgQ2FyTW9kZWw6CiAgICBtYXBwaW5nID0ge30KCiAgICBAc3RhdGljbWV0aG9kCiAgICBkZWYgX2tleShrZXksIG1hcHBpbmc9bWFwcGluZyk6CiAgICAgICAgZGVmIGRlY29yYXRvcihmdW5jKToKICAgICAgICAgICAgbWFwcGluZ1trZXldID0gZnVuYwogICAgICAgIHJldHVybiBkZWNvcmF0b3IKCiAgICBAY2xhc3NtZXRob2QKICAgIGRlZiBmcm9tX2RpY3QoY2xzLCBkOiBkaWN0KToKICAgICAgICBpbnN0YW5jZSA9IGNscygpCiAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZC5pdGVtcygpOgogICAgICAgICAgICBjbHMubWFwcGluZ1trZXldKGluc3RhbmNlLCB2YWx1ZSkKICAgICAgICByZXR1cm4gaW5zdGFuY2UKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5fX3doZWVsX2NvdW50OiBpbnQgPSAwCgogICAgQF9rZXkoJ3doZWVsQ291bnQnKQogICAgZGVmIHNldF93aGVlbF9jb3VudChzZWxmLCB2YWx1ZTogaW50KSAtPiBOb25lOgogICAgICAgIHNlbGYuX193aGVlbF9jb3VudCA9IHZhbHVlCgpjbGFzcyBUcnVja01vZGVsKENhck1vZGVsKToKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKICAgICAgICBzZWxmLl9fbG9hZF9pbl9rZzogaW50ID0gMAoKICAgIEBDYXJNb2RlbC5fa2V5KCdsb2FkSW5LZycpCiAgICBkZWYgc2V0X2xvYWRfaW5fa2coc2VsZiwgdmFsdWU6IGludCkgLT4gTm9uZToKICAgICAgICBzZWxmLl9fbG9hZF9pbl9rZz0gdmFsdWUKCnByaW50KHZhcnMoQ2FyTW9kZWwuZnJvbV9kaWN0KHsnd2hlZWxDb3VudCc6IDR9KSkpCnByaW50KHZhcnMoVHJ1Y2tNb2RlbC5mcm9tX2RpY3Qoeyd3aGVlbENvdW50JzogNiwgJ2xvYWRJbktnJzogODAwMH0pKSk=