【发布时间】:2019-01-09 03:40:03
【问题描述】:
我为这个指定的简化网格类编写了一个工作程序,但我无法使它适用于具有数十种方法/属性的真实类。 不能修改真实的Mesh类,也不能让Object类扩展Mesh。
这很好用:
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)
输出:
False
False
True
True
False
False
但是当我想对真正的 Mesh 类做同样的事情时,通过将 setattr 方法中的第一行替换为:
if name not in self.__dict__:
或者
if name in self.mesh.__dict__:
我在 getattr 方法中得到一个无限循环。 为什么?以及如何解决这个问题?
【问题讨论】:
-
你认为设置
self.mesh有什么作用?