class 声明参数在 python 中如何工作?
How do class declaration parameters work in python?
最近我遇到了 SQLModel 包。它结合了 pydantic
和 sqlalchemy
功能来处理数据库对象。
我在 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
功能有关。
如能提供有关此事的任何信息或链接,我们将不胜感激。
此行为基于您可以在用作 metaclass
的 class
中定义的 __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
最近我遇到了 SQLModel 包。它结合了 pydantic
和 sqlalchemy
功能来处理数据库对象。
我在 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
功能有关。
如能提供有关此事的任何信息或链接,我们将不胜感激。
此行为基于您可以在用作 metaclass
的 class
中定义的 __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