如何在启动时为 attr.s 设置默认值?
How to set default for attr.s at initiation?
使用 python attrs 库并尝试在设置对象中设置目录路径。当从 shell 本身设置环境变量时,这非常有效。但是,如果 TEST_TMPDIR 不是从 shell 设置的,而我尝试在 python 代码本身中设置值,则默认值初始化为 None.
@attr.s(frozen=True)
class Settings(object):
test_tmpdir = attr.ib(default=os.environ.get("TEST_TMPDIR"))
以下代码示例默认为 None。
os.environ["TEST_TMPDIR"] = '/tmp/'
setting = Settings()
代码当前仅在环境变量设置为 shell 级别时才有效。所以在终端中执行 export TEST_TMPDIR="/tmp/"
然后读取 Settings() 就可以了。
尝试在 __attrs_post_init__
中读取 os.environ["TEST_TMPDIR"] 它 return 由 python 代码设置的值。
有关为什么未在启动时设置默认值的任何链接都会有所帮助。
使用 attr.Factory
。这是一个在实例化时调用的可调用对象。在您的情况下,您可以使用 functools.partial
来创建工厂,因为参数是固定的。
像这样的东西应该有用(抱歉,我在 phone):
import attr
from functools import partial
@attr.frozen
class C:
test_tmpdir = attr.ib(factory=partial(os.environ.get, "TEST_TMPDIR"))
(factory=x
是 default=attr.Factory(x)
的语法糖)
使用 python attrs 库并尝试在设置对象中设置目录路径。当从 shell 本身设置环境变量时,这非常有效。但是,如果 TEST_TMPDIR 不是从 shell 设置的,而我尝试在 python 代码本身中设置值,则默认值初始化为 None.
@attr.s(frozen=True)
class Settings(object):
test_tmpdir = attr.ib(default=os.environ.get("TEST_TMPDIR"))
以下代码示例默认为 None。
os.environ["TEST_TMPDIR"] = '/tmp/'
setting = Settings()
代码当前仅在环境变量设置为 shell 级别时才有效。所以在终端中执行 export TEST_TMPDIR="/tmp/"
然后读取 Settings() 就可以了。
尝试在 __attrs_post_init__
中读取 os.environ["TEST_TMPDIR"] 它 return 由 python 代码设置的值。
有关为什么未在启动时设置默认值的任何链接都会有所帮助。
使用 attr.Factory
。这是一个在实例化时调用的可调用对象。在您的情况下,您可以使用 functools.partial
来创建工厂,因为参数是固定的。
像这样的东西应该有用(抱歉,我在 phone):
import attr
from functools import partial
@attr.frozen
class C:
test_tmpdir = attr.ib(factory=partial(os.environ.get, "TEST_TMPDIR"))
(factory=x
是 default=attr.Factory(x)
的语法糖)