相关疑难解决方法(0)

如何在Python中伪造/代理一个类

我写了一些包装器,它有另一个对象作为属性.此包装代理(向前)所有的属性与请求__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

26
推荐指数
2
解决办法
3万
查看次数

标签 统计

python ×1