[docs]classOverridableObject(HasDeclaritiveAttributes,SuperBase,object):""" """_overridable_object_save_kwargs=False_overridable_object_kwargs=Nonedef_overridable_object_inject(self,**kwargs):""" """kwargs_unmatched={}forkey,objinlist(kwargs.items()):try:parent_desc=getattr(self.__class__,key)exceptAttributeError:kwargs_unmatched[key]=objcontinueifisinstance(parent_desc,(types.MethodType,staticmethod,classmethod)):raiseValueError(("Can only redefine non-method descriptors, {0} a method of class {1}").format(key,self.__class__.__name__))try:use_bd=parent_desc._force_boot_dictexceptAttributeError:use_bd=Falseifnotuse_bd:setattr(self,key,obj)else:self.__boot_dict__[key]=objreturnkwargs_unmatched
[docs]def__init__(self,**kwargs):""" """ifself._overridable_object_save_kwargs:self._overridable_object_kwargs=kwargskwargs_unmatched=self._overridable_object_inject(**kwargs)ifkwargs_unmatched:raiseValueError(("Can only redefine class-specified attributes, class {0} does not have elements {1}").format(self.__class__.__name__,list(kwargs_unmatched.keys())))# now run the __mid_init__ before all of the declarative arguments triggerself.__mid_init__()super(OverridableObject,self).__init__()# print("OO: ", self)return