gpt4 book ai didi

python - 如何在默认为类级别值的 Python 方法中使用命名参数?

转载 作者:太空狗 更新时间:2023-10-30 00:30:39 26 4
gpt4 key购买 nike

使用场景:

# case #1 - for classes
a = MyClass() # default logger is None
a = MyClass(logger="a") # set the default logger to be "a"
a.test(logger="b") # this means that logger will be "b" only inside this method
a.test(logger=None) # this means that logger will be None but only inside this method
a.test() # here logger should defaults to the value specified when object was initialized ("a")

如何实现 MyClass 才能像上面那样使用它?

假设我在 MyClass 中有几个方法可以接受 logger 命名参数,所以我希望有一个不需要添加大量重复代码的解决方案在每个 test...() 方法的开头。

我读到了 sentinel example ,但这对类不起作用,我不想添加一个全局变量来将哨兵对象保存在里面。

最佳答案

_sentinel = object()

class MyClass(object):
def __init__(self, logger=None):
self.logger = logger
def test(self, logger=_sentinel):
if logger is _sentinel: logger = self.logger

# in case you want to use this inside a function from your module use:
_sentinel = object()
logger = None
def test(logger=_sentinel)
if logger is _sentinel: logger = globals().get('logger')

两个核心思想:捕获可能(或可能不会)在本地覆盖到关键字参数字典中的命名值集;使用 sentinel 对象作为默认值来唯一标识某个命名参数是否已显式传递(None 通常用于此目的,但是当您需要 None 时 作为参数的“第一类值”,唯一的哨兵对象也可以。

关于python - 如何在默认为类级别值的 Python 方法中使用命名参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567618/

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