When to use class versus dict in python?
在考虑设计时,在哪些情况下使用类与dict有意义?利弊也是有用的。
例如,
1 2 3 4 5 6 7 8 9 | class AlbumState: """ AlbumState class, tracks photos shown, etc""" def __init__ (self, album): """ album for this object will track state""" self.album = album self.photos_shown = [] self.photos_notshown = range(album.size()) |
对战
1 2 3 | albumstate['album'] = album albumstate['photos_shown'] = [] albumstate['photos_notshown'] = range(album.size()) |
我想说,区分是使用类还是使用字典的第一个也是最重要的标准是,您是否只是想要一些数据存储,或者您是否还想要一些逻辑(例如,方法)。
如果您只需要将几个数据放在一起,那么字典可能就是解决问题的方法。另一方面,如果您需要对该数据执行操作,并且数据和操作之间存在非常紧密的关系(形成一种实体),那么这实际上需要使用一个类。
正如@ben所建议的,当你有一堆相关的数据时,你可以开始使用一个字典,如果在某个时刻你意识到你也需要一些逻辑来处理这些数据,你可以把字典变成一个类。
您还可以查看统一建模语言(UML)及其类图,以更好地了解如何使用类。如果您只是在编写脚本或编程一个小的应用程序,那么您可能不需要使用UML,但是如果您正在设计一个更大更复杂的系统,那么它确实可以帮助您决定您事先需要什么以及需要多少类。
当您的键值都是有效的标识符字符串时,使用一个普通的类作为更方便的
1 2 3 4 5 6 7 8 9 10 11 12 13 | class Box: pass x = Box() x.a = 0 x.b = 1 d = {} d["a"] = 0 #"x.a" is easier to type than this d["b"] = 1 print("Current value for 'a' is: {}".format(x.a)) |
一旦您开始进行适当的面向对象设计,并且您有了与数据一起使用的方法函数,您就希望将数据放在适当的类中,这样您就可以将方法函数捆绑在中。仅仅拥有一个dict和一些对其进行操作的全球功能是合法的,但是如果它们都是相关的,那么将它们捆绑到一个
最后,请注意,
1 2 3 | print(x.a) # prints 1 print(x.__dict__["a"]) # does exact same thing as previous line |