class CIFAR10Record(object):
pass
result = CIFAR10Record()
result.height = 32
result.width = 32
result.depth = 3
这段代码创建了一个类及其实例。
这种模式有哪些优点和缺点?
答案 0 :(得分:4)
此代码使用一个类来“聚集”许多相关字段。
专业人士认为它非常灵活。该类的定义没有任何成员。任何函数都可以决定添加哪些字段。不同的调用可以创建此类的对象,并以不同的方式填充它们(因此,同时,您可以拥有具有不同成员的同一类的对象)。
这种灵活性也是一个骗局。这缺乏结构:查看代码并决定类将拥有哪些成员更难。获得这样一个对象并迭代成员也不那么直截了当。最后,该类是一个没有encapsulation的极端情况。
总而言之,我认为有更好的选择:
如果确实需要这种灵活性(这本身就是一个问题),您可能需要考虑使用dict
。
result = {}
result['height'] = 32
result['width'] = 32
result['depth'] = 3
这里(IMHO)更清楚的是,结果只是一组字段,使用dict
's methods迭代字段更容易。
如果不需要这种灵活性,并且这只是最小化代码量的一种方法,那么您应该考虑使用collections.namedtuple
。
import collections
CIFAR10Record = collections.namedtuple('CIFAR10Record', ['height', 'width', 'depth'])