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

标签 python class metaclass pydantic sqlmodel

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

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

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

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

任何有关此事的信息或链接将不胜感激。

最佳答案

此行为基于您可以在用作元类中定义的__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

关于python - 类声明参数在 python 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71626903/

相关文章:

python - 如何从python中的system()命令捕获异常

c# - 将没有根对象的json反序列化为c#/vb.net类

python - 元类中的 super

python - 在导入的模块中使用外部类方法

python - 导入错误: No module named plotly.

python - 增长 numpy 数组

class - 非托管 var 作为托管类 c++ 的成员

C++ 复制构造函数和默认构造函数

python - 为什么将第二个属性添加到元类-属性-闭包组合会更改第一个属性?

python - Python 3 中的有序类