无需硬编码即可获取类的字段名称

MD *_*ffy 5 python pydantic

我有一个像这样的 Pydantic 模型类

class User(BaseModel):
   username: str
   firstname: str
   lastname: str
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够引用“用户名”而无需硬编码(就像我如何能够引用类名一样)

setup_index(User.__name__, "username") 
Run Code Online (Sandbox Code Playgroud)

有没有办法不通过代码生成路线?

Ven*_*ath 3

  1. 如果客户端知道成员的姓名,则getattr(user, 'username')可以使用(如 @michael-butscher 所提到的)。
  2. 如果客户端不知道成员的名称,则可以通过创建 getter 函数name_getter = operator.attrgetter('username')并将其提供给客户端以用作name_getter(user). User通过在 中定义一个 getter 方法并提供对该方法的引用可以达到相同的效果。无论哪种方式,如果username是实现细节,那么此方法有助于向客户端隐藏此类细节。