class 声明参数在 python 中如何工作?

How do class declaration parameters work in python?

最近我遇到了 SQLModel 包。它结合了 pydanticsqlalchemy 功能来处理数据库对象。 我在 documentation 中注意到的是 table=True 用于声明模型的参数 class:

from typing import Optional

from sqlmodel import Field, SQLModel, create_engine


class Hero(SQLModel, table=True):
    id: Optional[int] = Field(default=None, primary_key=True)
    name: str
    secret_name: str
    age: Optional[int] = None

我永远无法理解这种参数是什么以及它是如何工作的。 它是如何命名的,您如何自己实现一个? 我在声明 classes 时看到了一个 metaclass 关键字,但我认为有一个严格的 可用关键字列表。但它似乎非常可配置。

此问题与 SQLModel 没有直接关系,而是与一般 python 功能有关。

如能提供有关此事的任何信息或链接,我们将不胜感激。

此行为基于您可以在用作 metaclassclass 中定义的 __init_subclass__ 方法。看下面的例子:

class MyMetaClass:
  def __init_subclass__(cls, foo=None):
    super().__init_subclass__()
    cls.foo = foo

class MyActualClass(MyMetaClass, foo='baz'):
  pass
  
instance = MyActualClass()
print(instance.foo)  # "baz"

您可以在 python 官方文档中找到更多详细信息:https://docs.python.org/3/reference/datamodel.html#customizing-class-creation