# print(dir()) # print("i0") print("i0:",dir()) def sinfo(o): for k in o["g"].keys(): print(k) print("...") for k in o["l"].keys(): print(k) # self. # print(eflag) # sinfo({"g":globals(),"l":locals()}) # self.scope_opt = "globals" # self.scope_opt = "locals" print(end="",flush=True) def mro_wo(klass): ret = [*klass.__mro__] if object in ret: ret.remove(object) return ret def class_reset_v0(klass): # print("\n") # print(klass,_klass) n = klass.__name__ n2 = getattr(klass,"_rcls_name","NO ATTR") # print("class reset:", klass,n,n2) for en in dir(klass): if en[:2]=="__":continue # p("???") attr = getattr(klass,en,"NO ATTR") # p("???..",en,klass,attr) # p* # print("\t",en,attr) # setattr(klass,en,attr) if en == "_rcls_name":pass # continue setattr(klass,en,None) delattr(klass,en) r''' try: # z+1 setattr(klass,en,None) p("DEL",en,attr,hasattr(klass,en)) delattr(klass,en) pass except Exception as e: p("~~",e) # inspect. # p(dir(inspect)) # p(dir(e)) tx= traceback.print_tb(e.__traceback__) # traceback.print_tb(e) # p() p(tx) # p(.print_tb()) raise e # ''' def get_class_by_name(klass,_klass,dec_c1): rcls = None # _rcls_name __rcls_name = _klass.__name__ mro = mro_wo(klass) if klass in mro and not dec_c1: mro.remove(klass) for cls in mro: # _rcls_name = getattr(cls,"rcls_name_a",None) _rcls_name = getattr(cls,"_rcls_name",None) if not rcls and not _rcls_name: rcls=cls if _rcls_name == __rcls_name: rcls=cls if not rcls: p("OUT OF EMPTY CLASSES") raise "class_rld_ERR" return rcls def class_reset_mro(klass): for cls in mro_wo(klass): class_reset_v0(cls) # TODO:JFI I forgot what dec_c1 does def class_edit_v2(__klass,_klass,reset=0,dec_c1=0): # print("\n") # rglob.cls_e.append((__klass.__name__,_klass.__name__)) klass = get_class_by_name(__klass,_klass,dec_c1) cls_name = _klass.__name__ # klass._rcls_name=cls_name # setattr(klass,"rcls_name_a",cls_name) print(klass,_klass) if reset: class_reset_v0(klass) if reset == "rmv": return setattr(klass,"_rcls_name",cls_name) for en in dir(_klass): if en[:2]=="__":continue attr = getattr(_klass,en,"NO ATTR") # print("\t",en) setattr(klass,en,attr) class_edit = class_edit_v2 class_reset = class_reset_mro