Spaces:
Runtime error
Runtime error
def extend_instance(obj, mixin): | |
"""Apply mixins to a class instance after creation""" | |
base_cls = obj.__class__ | |
base_cls_name = obj.__class__.__name__ | |
obj.__class__ = type( | |
base_cls_name, (mixin, base_cls), {} | |
) # mixin needs to go first for our forward() logic to work | |
def getattr_recursive(obj, att): | |
""" | |
Return nested attribute of obj | |
Example: getattr_recursive(obj, 'a.b.c') is equivalent to obj.a.b.c | |
""" | |
if att == "": | |
return obj | |
i = att.find(".") | |
if i < 0: | |
return getattr(obj, att) | |
else: | |
return getattr_recursive(getattr(obj, att[:i]), att[i + 1 :]) | |
def setattr_recursive(obj, att, val): | |
""" | |
Set nested attribute of obj | |
Example: setattr_recursive(obj, 'a.b.c', val) is equivalent to obj.a.b.c = val | |
""" | |
if "." in att: | |
obj = getattr_recursive(obj, ".".join(att.split(".")[:-1])) | |
setattr(obj, att.split(".")[-1], val) | |