的Python:动态分配类的方法(Python: Dynamically assign class

2019-08-08 18:28发布

本质上,这是我想要完成的任务:

class Move(object):
    def __init__(self, Attr):
        if Attr:
            self.attr = Attr

        if hasattr(self, "attr"):
            __call__ = self.hasTheAttr
        else:
            __call__ = self.hasNoAttr

    def hasNoAttr(self):
        #no args!

    def hasTheAttr(func, arg1, arg2):
        #do things with the args

    __call__ = hasNoAttr

我知道,那是不行的,它只是使用hasNoAttr所有的时间。 我首先想到的是使用一个装饰,但我不是所有熟悉他们,我无法弄清楚如何从是否不存在或不是一个类属性为基础的。

实际问题的一部分:我怎么能做出确定性取决于条件的函数或者X功能或y功能。

Answer 1:

你真的不能做这种事情与__call__ -与其他(非魔法)的方法,你可以只猴子,补一补,但与__call__和其他魔术方法,你需要的魔术方法内委托给适当的方法本身:

class Move(object):
    def __init__(self, Attr):
        if Attr:
            self.attr = Attr

        if hasattr(self, "attr"):
            self._func = self.hasTheAttr
        else:
            self._func = self.hasNoAttr

    def hasNoAttr(self):
        #no args!

    def hasTheAttr(func, arg1, arg2):
        #do things with the args

    def __call__(self,*args):
        return self._func(*args)


文章来源: Python: Dynamically assign class methods