如何在Python中创建嵌套类型的数据?



我想确保,当类创建时传递的参数之一是特定类型的。下面是一个例子:

from __future__ import annotations
from dataclasses import dataclass

@dataclass(frozen=True, order=True)
class ListItems:
items: list | str | int | ListItems

class PList:
def __init__(self, name: str, items: ListItems):
self.type = "list"
self.name = name
self.items = items

a = PList('asd', ['asd'])

接下来的想法是:items只能是string,int数据类型或其他列表的列表。stringint,它是嵌套的。例如:

[] OK
[1,2,'asd'] OK
[[1,2,3],'asd',[]] OK
[{}] NOT OK
['test', [{}]] NOT OK

有可能在Python中实现这样的东西吗?

我不是很熟悉Python的OOP,但是从我发现的情况来看,它没有像其他编程语言那样的接口和/或抽象类的本机实现。

PS:你看到的代码,只是我的实现尝试,它没有工作。

def __init__(self, name: str, items: ListItems):

items: ListItems位表示items应该是ListItems对象,它没有传递ListItems所做的逻辑,它实际上只是比较它是什么类型。

我没有太多的打字经验,但我认为你正在寻找items: list[str|int]注意,对于列表,有正常的列表类型提示,然后在打字库中也有一个。不确定是否有差异,我只知道正常的列表类型提示是小写的(list而不是List,就像在类型库中一样),而且它是相对较新的(3.11我认为)

你的问题的简短回答Python是动态类型语言。在代码运行之前,它不知道变量的类型。所以声明是没有用的。它所做的是,把这个值存储在某个内存位置,然后把变量名绑定到那个内存容器上。并使容器的内容可以通过该变量名访问。所以数据类型不重要。因为它将在运行时了解值的类型。

名称在执行时绑定到对象通过赋值语句,可以在程序执行期间将一个名称绑定到不同类型的对象。函数和对象可以在运行时修改。

在动态类型语言中,变量只是绑定到的值一个名字;该值具有类似于类型的"整数"。或";string"或";list"——但是变量本身没有。您可以有一个变量,它现在保存一个数字,然后如果需要的话,给它分配一个字符串它需要改变。在静态类型语言中,变量本身具有一个类型;如果你有一个整数变量,你就不能以后再给它赋其他类型的值

从下面的一点来看,你会发现在python代码中显式地预定义数据类型并不能强制它只接受这种类型:

(因为类型错误是程序中可能出错的所有事情的一小部分);因此,使用动态语言的程序员依赖于他们的测试来捕获这些错误和所有其他错误,而不是使用专用类型检查编译器。

查看此参考以获取更多信息。

我不确定您是否需要类列表项。在你的初始化方法中使用一个简单的if语句。

class PList:
def __init__(self, name, items):
self.type = 'list'
self.name = name
if type(items) is list or type(items) is str or type(items) is int:
self.items = items

最新更新