2

在 vanilla Python 中创建一个类,该类在启动时也会启动另一个我将使用的类__init__(self)

class SomeClass:
    __init__(self, token: str):
        self.token = token
        client = WebClient(auth=self.token)

但是在attrs中,我不能这样做。以下会产生错误,因为它传递的是_CountringAttr对象,而不是解析的字符串。

@attr.s()
class SomeClass:
    token: str = attr.ib()
    client = WebClient(auth=token)

完成此任务的“正确”方法是什么?

4

1 回答 1

3

您可以使用默认值:

@attr.define
class SomeClass:
    token: str
    client: WebClient = attr.field()  # needed! attr.ib works too

    @client.default
    def _client_factory(self):
        return WebClient(self.token)

__attrs_post_init__

@attr.define
class SomeClass:
    token: str
    client: WebClient = attr.field(init=False)

    def __attrs_post_init__(self):
        self.client = WebClient(self.token)

PS 我正在使用现代attrsAPI 来让它们更广为人知。如果您想了解更多信息,请查看https://www.attrs.org/en/latest/names.html 。

于 2021-11-24T11:29:57.063 回答