我刚刚发现了dataclasses
,正在阅读一些如何使用它们的教程。一个教程将数据类描述为:
A data class is a class typically containing mainly data, although there aren’t really any restrictions.
除了数据类还有哪些其他类型的类?这些类也有有用的工具/装饰器吗?如果数据类是一个主要包含数据的类,那么主要包含助手方法的类是另一回事?
或者我应该考虑使用@dataclass
装饰器的任何类,我想建立只要我使用Python 3.7+?
不,你不应该用@dataclass
装饰每个班级。从概念上讲,数据类只是一个容器。如果你想的话,你可以使用i.e. dictionary,但使用常规类可以让你有机会编写自己的访问器(setter/getter),已知和类型暗示属性等,而dictionary会接受你扔给它的任何东西(不管它是否带有打字错误,等等)。有一种保护有助于保持你的代码干净和更严格,也使所有的lint,如pylink, flake8知道他们在处理什么,这总是一件好事™。
技术上没有限制你的数据类可以做什么,因为这只是一个类的任何其他,所以你可以写任何你想要的,但你想保持逻辑最小,通常有getter/setter,或者你可以有__cmp__()
,__eq__()
或__ne__()
实现,如果你会从中受益,但不是业务逻辑。
根据你使用的语言,声明/注释/装饰类作为数据类通常会对它做一些额外的魔法,并使它有一些常见的样板代码生成/实现,如上述访问器,哈希函数,toString()
等。
这里有几种类型的类,但还有其他类型,它们可能在不同的期刊或参考文献中定义不同。
- 数据类:主要包含数据的类(这就是您要询问的)
- 实用程序类:包含可以在程序的不同部分使用的辅助方法的类(这是您正在寻找的替代)
- 抽象类:为其他类提供继承接口的类。不能在自己的 上实例化
- 具体类:可以用来创建对象的类
- 修饰类:可以用来修改其他类行为的类
您考虑的是实用程序类,它不是真正的数据类。