You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

i0.py 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. # print(dir())
  2. # print("i0")
  3. print("i0:",dir())
  4. def sinfo(o):
  5. for k in o["g"].keys():
  6. print(k)
  7. print("...")
  8. for k in o["l"].keys():
  9. print(k)
  10. # self.
  11. # print(eflag)
  12. # sinfo({"g":globals(),"l":locals()})
  13. # self.scope_opt = "globals"
  14. # self.scope_opt = "locals"
  15. print(end="",flush=True)
  16. def mro_wo(klass):
  17. ret = [*klass.__mro__]
  18. if object in ret:
  19. ret.remove(object)
  20. return ret
  21. def class_reset_v0(klass):
  22. # print("\n")
  23. # print(klass,_klass)
  24. n = klass.__name__
  25. n2 = getattr(klass,"_rcls_name","NO ATTR")
  26. # print("class reset:", klass,n,n2)
  27. for en in dir(klass):
  28. if en[:2]=="__":continue
  29. # p("???")
  30. attr = getattr(klass,en,"NO ATTR")
  31. # p("???..",en,klass,attr)
  32. # p*
  33. # print("\t",en,attr)
  34. # setattr(klass,en,attr)
  35. if en == "_rcls_name":pass
  36. # continue
  37. setattr(klass,en,None)
  38. delattr(klass,en)
  39. r'''
  40. try:
  41. # z+1
  42. setattr(klass,en,None)
  43. p("DEL",en,attr,hasattr(klass,en))
  44. delattr(klass,en)
  45. pass
  46. except Exception as e:
  47. p("~~",e)
  48. # inspect.
  49. # p(dir(inspect))
  50. # p(dir(e))
  51. tx= traceback.print_tb(e.__traceback__)
  52. # traceback.print_tb(e)
  53. # p()
  54. p(tx)
  55. # p(.print_tb())
  56. raise e
  57. # '''
  58. def get_class_by_name(klass,_klass,dec_c1):
  59. rcls = None
  60. # _rcls_name
  61. __rcls_name = _klass.__name__
  62. mro = mro_wo(klass)
  63. if klass in mro and not dec_c1:
  64. mro.remove(klass)
  65. for cls in mro:
  66. # _rcls_name = getattr(cls,"rcls_name_a",None)
  67. _rcls_name = getattr(cls,"_rcls_name",None)
  68. if not rcls and not _rcls_name:
  69. rcls=cls
  70. if _rcls_name == __rcls_name:
  71. rcls=cls
  72. if not rcls:
  73. p("OUT OF EMPTY CLASSES")
  74. raise "class_rld_ERR"
  75. return rcls
  76. def class_reset_mro(klass):
  77. for cls in mro_wo(klass):
  78. class_reset_v0(cls)
  79. # TODO:JFI I forgot what dec_c1 does
  80. def class_edit_v2(__klass,_klass,reset=0,dec_c1=0):
  81. # print("\n")
  82. # rglob.cls_e.append((__klass.__name__,_klass.__name__))
  83. klass = get_class_by_name(__klass,_klass,dec_c1)
  84. cls_name = _klass.__name__
  85. # klass._rcls_name=cls_name
  86. # setattr(klass,"rcls_name_a",cls_name)
  87. print(klass,_klass)
  88. if reset:
  89. class_reset_v0(klass)
  90. if reset == "rmv":
  91. return
  92. setattr(klass,"_rcls_name",cls_name)
  93. for en in dir(_klass):
  94. if en[:2]=="__":continue
  95. attr = getattr(_klass,en,"NO ATTR")
  96. # print("\t",en)
  97. setattr(klass,en,attr)
  98. class_edit = class_edit_v2
  99. class_reset = class_reset_mro