如何定义递归 Pydantic 模型?
这是我的意思的一个例子:
from typing import List
from pydantic import BaseModel
class Task(BaseModel):
name: str
subtasks: List[Task] = []
Run Code Online (Sandbox Code Playgroud)
但是当我运行时出现以下错误:
NameError Traceback (most recent call last)
<ipython-input-1-c6dca1d390fe> in <module>
2 from pydantic import BaseModel
3
----> 4 class Task(BaseModel):
5 name: str
6 subtasks: List[Task] = []
<ipython-input-1-c6dca1d390fe> in Task()
4 class Task(BaseModel):
5 name: str
----> 6 subtasks: List[Task] = []
7
NameError: name 'Task' is not defined
Run Code Online (Sandbox Code Playgroud)
我查看了文档但找不到任何内容。例如,在“递归模型”页面上,但它似乎是关于嵌套子类型而BaseModel不是关于递归类型定义。
感谢您的帮助!
std :: atomic类型允许对变量进行原子访问,但我有时会喜欢非原子访问,例如当访问受到互斥锁保护时.考虑一个允许多线程访问(通过插入)和单线程矢量化访问(通过运算符| =)的位域类:
class Bitfield
{
const size_t size_, word_count_;
std::atomic<size_t> * words_;
std::mutex mutex_;
public:
Bitfield (size_t size) :
size_(size),
word_count_((size + 8 * sizeof(size_t) - 1) / (8 * sizeof(size_t)))
{
// make sure words are 32-byte aligned
posix_memalign(&words_, 32, word_count_ * sizeof(size_t));
for (int i = 0; i < word_count_; ++i) {
new(words_ + i) std::atomic<size_t>(0);
}
}
~Bitfield () { free(words_); }
private:
void insert_one (size_t pos)
{
size_t mask = size_t(1) << (pos % …Run Code Online (Sandbox Code Playgroud)