, NiceClass, LesserClass.
, , MyNiceClass MyLesserClass LesserClass, __globals__ dict 'LesserClass' MyLesserClass.
, , __getattribute__:
class A:
a = 'A.a'
b = 'A.b'
class B:
def func_a(self):
print(A.a)
def func_b(self):
print(A.b)
class C:
a = 'C.a'
b = 'C.b'
class D(B):
def func_a(self):
print(C.a)
def __getattribute__(self, attr):
value = object.__getattribute__(self, attr)
if callable(value):
value = update_namespace(value, {'old': {'name': 'A', 'obj': A}, 'new': {'obj': C}})
return value
def update_namespace(func, namespace):
def wrapper(*args, **kwargs):
func.__globals__[namespace['old']['name']] = namespace['new']['obj']
val = func(*args, **kwargs)
func.__globals__[namespace['old']['name']] = namespace['old']['obj']
return val
return wrapper
d = D()
d.func_a()
d.func_b()
:
C.a
C.b