0

使用 python attrs 库并尝试在 Settings 对象中设置目录路径。当从 shell 本身设置环境变量时,这非常有用。但是,如果没有从 shell 设置 TEST_TMPDIR 并且我尝试在 python 代码本身中设置该值,则默认值初始化为 None。

   @attr.s(frozen=True)
    class Settings(object):
      test_tmpdir = attr.ib(default=os.environ.get("TEST_TMPDIR"))

下面的代码示例默认为无。

os.environ["TEST_TMPDIR"] = '/tmp/'
setting = Settings()

只有在 shell 级别设置环境变量时,代码当前才有效。所以export TEST_TMPDIR="/tmp/"在终端中做然后阅读 Settings() 工作。

尝试在其中读取 os.environ["TEST_TMPDIR"]__attrs_post_init__确实返回了 python 代码设置的值。

任何有关为什么在启动时未设置默认值的链接都会有所帮助。

4

1 回答 1

1

使用attr.Factory. 这是在实例化时调用的可调用对象。在您的情况下,您可以使用functools.partial创建工厂,因为参数是固定的。

像这样的东西应该可以工作(对不起,我在打电话):

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)

于 2021-03-07T06:30:34.027 回答