Я написал рабочую программу для этого указанного упрощенного класса Mesh, но я не могу заставить ее работать для реального класса с десятками методов/свойств. Я не могу изменить реальный класс Mesh, и я не могу сделать расширенный Mesh класса Object.
Это отлично работает:
class Mesh:
def __init__(self):
self.hide_render = False
class Object:
def __init__(self, mesh_):
self.mesh = mesh_
def __getattr__(self, item):
return self.mesh.__getattribute__(item) # infinite loop in this line
def __setattr__(self, name, value):
if name == 'hide_render': # line to replace----------
self.mesh.__setattr__(name, value)
else:
super().__setattr__(name, value)
ob = Object(Mesh())
print(ob.hide_render)
print(ob.mesh.hide_render)
ob.mesh.hide_render = True
print(ob.hide_render)
print(ob.mesh.hide_render)
ob.hide_render = False
print(ob.hide_render)
print(ob.mesh.hide_render)
Output:
False
False
True
True
False
False
Но когда я хочу сделать то же самое для реального класса Mesh с гораздо большим, чем атрибут «hide _render», заменив первую строку в методе setattr на: if name not in self.__dict__:
или if name in self.mesh.__dict__:
Я получаю бесконечный цикл в методе getattr. Почему? И как это решить?
self.mesh
? - person user2357112 supports Monica   schedule 09.01.2019