我写了一些包装器,它有另一个对象作为属性.此包装代理(向前)所有的属性与请求__getattr__和__setattr__存储作为属性的对象.我还需要为我的代理提供什么,以便在通常情况下包装器看起来像包装类?
我想我需要修复诸如继承之类的东西,也许__repr__,......我还需要处理什么,以及如何修复继承以便instanceof()有效?
编辑:我尝试制作一个功能代理,但由于我不完全理解配方,它失败了:(
setattr_=object.__setattr__
getattr_=object.__getattribute__
class Proxy(object):
__slots__=["_func", "_params", "_kwargs", "_obj", "_loaded", "__weakref__"]
def __init__(self, func, *params, **kwargs):
setattr_(self, "_func", func)
setattr_(self, "_params", params)
setattr_(self, "_kwargs", kwargs)
setattr_(self, "_obj", None)
setattr_(self, "_loaded", False)
def _get_obj(self):
if getattr_(self, "_loaded")==False:
print("Loading")
setattr_(self, "_obj", getattr_(self, "_func")(*getattr_(self, "_params"), **getattr_(self, "_kwargs")))
setattr_(self, "_loaded", True)
return getattr_(self, "_obj")
#
# proxying (special cases)
#
def __getattribute__(self, name):
return getattr(getattr_(self, "_get_obj")(), name)
def __delattr__(self, name):
delattr(getattr_(self, "_get_obj")(), name)
def …Run Code Online (Sandbox Code Playgroud) python ×1