+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

使用装饰器将方法动态添加到类

发布于2019-10-07 19:29     阅读(793)     评论(0)     点赞(14)     收藏(0)


我将class动态添加方法...函数名称也将动态传递。

我能怎么做?我以这种方式尝试

def decor(*var):
  def onDecorator(aClass):
    class onInstance:
        def __init__(self,*args,**kargs):
            setter=var
            aClass.setter = self.flam
            self.wrapped = aClass(*args,**kargs)

        def __getattr__(self,attr):
            return getattr(self.wrapped,attr)

        def __setattr__(self,attr,value):
            if attr == 'wrapped':
                self.__dict__[attr]=value
            else:
                setattr(self.wrapped,attr,value)

        def flam(self,*args):
            self.__setattr__('dimension',len(args[0]))

    return onInstance
return onDecorator

但是如果我这样做:

print(aClass.__dict__)

我有

'setter': <bound method onInstance.flam of <__main__.onInstance object at 0x522270>>

代替var:...

我有这个课:

class D:
  def __init__(self, data):
    self.data = data
    self.dimension = len(self.data)

我会打电话给:

D.name()

回来了,self.dimension但我name事先不知道


解决方案


这是我的装饰工

def decorator(name):
    def wrapper(K):
        setattr(K, name, eval(name))
        return K
    return wrapper

这是一个示例方法

def myfunc(self):
    print "Istance class: ", self

这是一个去皮的类

@decorator("myfunc")
class Klass:
    pass

我希望这是有用的,并且您需要什么:)



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/133145/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

14 0
收藏该文
已收藏

评论内容:(最多支持255个字符)