Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建类与为“较小”对象使用dict_Python_Python 3.x - Fatal编程技术网

Python 创建类与为“较小”对象使用dict

Python 创建类与为“较小”对象使用dict,python,python-3.x,Python,Python 3.x,假设我有以下几点: class Product def __init__(self, name="Pepsi"): self.name = name self.daily_sales = [] 日常销售对象是这样的: { "date": 2019-01-01, "price": 1.99, "revenue: 283.01 } Product类中的daily_sales将只包含一堆sales_对象。我的问题是,什么时候像字典这

假设我有以下几点:

class Product

    def __init__(self, name="Pepsi"):
        self.name = name
        self.daily_sales = []
日常销售对象是这样的:

{
    "date": 2019-01-01,
    "price": 1.99,
    "revenue: 283.01
}
Product类中的daily_sales将只包含一堆sales_对象。我的问题是,什么时候像字典这样的东西应该转换成一个单独的类?什么时候有意义,什么时候没有意义?例如:

ProductDailySale:
    def __init__(self, product_id):
        self.product_id;
        self.date;
        self.price;
        self.revenue;

我的指导是,几乎永远不要使用DICT作为固定布局的数据结构

相反,使用类。定义简单数据类的一种方便方法是,或者,在较旧版本的Python中

与使用DICT相比,我发现这有两个主要优势,尤其是与pytype和静态代码分析一起使用时:

可以使用类型签名对字段进行注释,并进行静态类型检查。 拼写错误的字段名会在构建时被捕获,而不会导致失败,有时会保持沉默——想想dict.get在运行时返回None。
我的指导是,几乎永远不要使用DICT作为固定布局的数据结构

相反,使用类。用一种简单的方式来定义数据或Python的旧版本

与使用DICT相比,我发现这有两个主要优势,尤其是与pytype和静态代码分析一起使用时:

可以使用类型签名对字段进行注释,并进行静态类型检查。 拼写错误的字段名会在构建时被捕获,而不会导致失败,有时会保持沉默——想想dict.get在运行时返回None。
dict对象是地图。如果需要映射,则使用dict。如果需要单独的数据类型,则使用自定义类实例。或者,如果您想要一个像简单结构一样的轻量级容器,您可以使用collections.namedtuple,但是,如果您担心内存开销,您总是可以使用带有插槽的自定义类。我认为,您永远不应该以使用dict对象的方式使用它们,尽管考虑到JSON序列化格式的普遍性,您经常会对数据进行操作吗?还是只是储存?如果只是存储它,我将使用NamedTuples而不是类。如果您对与数据相关的数据执行操作,我将使用一个类。如果您要查询/操作/扩展每日销售额,我有必要创建一个单独的类。如果您也有方法,请查看数据类。dict对象是映射。如果需要映射,则使用dict。如果需要单独的数据类型,则使用自定义类实例。或者,如果您想要一个像简单结构一样的轻量级容器,您可以使用collections.namedtuple,但是,如果您担心内存开销,您总是可以使用带有插槽的自定义类。我认为,您永远不应该以使用dict对象的方式使用它们,尽管考虑到JSON序列化格式的普遍性,您经常会对数据进行操作吗?还是只是储存?如果只是存储它,我将使用NamedTuples而不是类。如果您对与数据相关的数据进行操作,我将使用一个类。如果您要查询/操作/扩展每日销售额,我有必要创建一个单独的类。如果您也有方法,请查看数据类。不幸的是,我完全同意,很多Javascript用户这样使用它是因为他们将python dict对象与Javascript对象混为一谈,但是dataclass实际上只是一个方便的类,它实际上只是一个普通的类。@NPE-您可以用上面的代码演示一个示例,说明如何使用dataclass吗?“我以前从来没听说过这些。”David542他说的是“只使用一个类”。dataclass decorator只是一种很好的、方便的方法,它可以创建这样的类,这些类只使用最少的样板文件来保存数据,但是您应该真正尝试去探索这个答案的核心是说,在这个问题上不要使用dict对象all@NPE-再看看这个,这似乎只是一个类的核心?@juanpa.arrivillaga:谢谢-这是我的论点的要点,尽管它显然没有表达得很好。编辑。我完全同意,不幸的是,很多Javascript用户这样使用它,因为他们将python dict对象与Javascript对象混为一谈,但数据类实际上只是一种方便,它实际上只是一个普通类。@NPE-您能用上面的代码演示如何使用数据类吗?“我以前从来没听说过这些。”David542他说的是“只使用一个类”。dataclass decorator只是一种很好的、方便的方法,它可以创建这样的类,这些类只使用最少的样板文件来保存数据,但是您应该真正尝试去探索这个答案的核心是说,在这个问题上不要使用dict对象all@NPE-再看看这个,这似乎只是一个类的核心?@juanpa.arrivillaga:谢谢-这是我的论点的要点,尽管它显然没有表达得很好。编辑。