python3默认类属性为同一类中的方法

时间:2019-05-27 15:32:16

标签: python-3.x class oop default-value

class Test:
    func = self.func2 # default: func is func2 by default
    # tried Test.func2 as well and Pycharm shows error

    def __init__(self, func=None):
        if func is not None:
            self.func = func

    def func1():
        pass

    def func2():
        pass

任何人都可以建议如何实现上述目标吗?

我也尝试在构造函数中将func参数设置为默认值func2,但这也会出错。

因此,稍后,在Test类中的某个地方,我可以调用self.func而不是反复运行条件来确定是否应使用func1或func2

self.func()

2 个答案:

答案 0 :(得分:0)

您可以根据__init__参数的值在func方法中设置默认值:

也许是这样的:

class Test:

    def __init__(self, func=None):
        if func is None:
            self.func = self.func2
        else:
            self.func = func

    def func1():
        pass

    def func2():
        pass

答案 1 :(得分:0)

如果您不使用self(未定义),并且将其移到类定义的末尾,那么您的代码将在类范围内工作,这样{{1} }在运行时将存在于命名空间中。

func2

我会注意到,当您将函数分配给类变量时,它将像方法一样对待,因此您可能需要更改class Test: def __init__(self, func=None): if func is not None: self.func = func def func1(): pass def func2(): pass func = func2 # this will work down here 才能期望func2作为其第一个参数。对于分配为实例变量的方法,例如传递给self方法的任何func,绑定行为都不会发生。如果您想要针对这些行为绑定行为,则需要自己实现(也许使用__init__)。