在Python中以这种方式创建类和实例的优点和缺点是什么?

时间:2016-09-18 07:47:29

标签: python class

class CIFAR10Record(object):
    pass

result = CIFAR10Record()
result.height = 32
result.width = 32
result.depth = 3

这段代码创建了一个类及其实例。

这种模式有哪些优点和缺点?

1 个答案:

答案 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'])