使用类自变量作为默认的类方法参数

时间:2018-10-17 11:27:50

标签: python python-3.x

我可以在self的方法定义中使用python参数吗?

class Test:

    def __init__(self, path):
        self.path = pathlib.Path(path)

    def lol(self, destination=self.path):
        x = do_stuff(destination)
        return x

我可以制作def lol(self, destination)并以test_obj.lol(test_obj.path)的方式使用它。但是,是否可以将默认destination arg设置为self.path?下面以另一种方式发布(基于this answers),但是我可以以某种方式重构它并使它更优雅吗?也许在python3。+版本中有新的解决方案。

def lol(self, destination=None):
    if destination in None:
        destination = self.path
    x = do_stuff(destination)
    return x

2 个答案:

答案 0 :(得分:2)

我如何重构代码:

def func_test(self, destination=None):
    return do_stuff(destination or self.path)

以上是最干净最危险的。 -一种最理想的情况,您知道该值,并且or非常合适。 -否则粗心使用它。

否则,我会选择:

def func_test(self, destination=None):
    return do_stuff(destination if destination is not None else self.path)

关于将self.property传递给函数参数;只是没有。

答案 1 :(得分:2)

不。 这会导致问题,因为self.Path可能会在运行时发生变化。 但是默认参数都是在创建时评估的。 因此,目的地始终是一个静态值,随时可能与self.Path不同。

编辑:

请参阅Why are default arguments evaluated at definition time in Python?