python教程—如何将实例成员的默认参数值传递给方法?-Python实用宝典

python教程—如何将实例成员的默认参数值传递给方法?

我想使用实例属性的值将默认参数传递给实例方法:

我想使用实例属性的值将默认参数传递给实例方法:

    class C: def __init__(self, format): self.format = format def process(self, formatting=self.format): print(formatting)

尝试时,我得到以下错误信息:

NameError: name 'self' is not defined

我想让这个方法像这样:

    C("abc").process() # prints "abc" C("abc").process("xyz") # prints "xyz"

这里的问题是什么,为什么这行不通?我该怎么做呢?

回答

您不能真正地将其定义为默认值,因为默认值是在方法定义时计算的,而方法是在任何实例存在之前计算的。通常的模式是这样做:

    class C: def __init__(self, format): self.format = format def process(self, formatting=None): if formatting is None: formatting = self.format print(formatting)

自我。只有在格式化为None时才使用format。


要演示默认值如何工作,请参见下面的示例:

    def mk_default(): print("mk_default has been called!") def myfun(foo=mk_default()): print("myfun has been called.") print("about to test functions") myfun("testing") myfun("testing again")

这里的输出是:

    mk_default has been called! about to test functions myfun has been called. myfun has been called.

注意mk_default只被调用一次,而这发生在函数被调用之前!

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
0

发表评论