gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:29:52 25 4
gpt4 key购买 nike

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

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)

self.format 仅在 formattingNone 时使用。


要演示默认值的工作原理,请参见以下示例:

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 - 如何将实例成员的默认参数值传递给方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8131942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com