在Python中以这种方式创建类和实例有哪些优缺点?
class CIFAR10Record(object):
pass
result = CIFAR10Record()
result.height = 32
result.width = 32
result.depth = 3
这段代码创建一个类及其实例。在Python中以这种方式创建类和实例有哪些优缺点?
这种模式的优点和缺点是什么?
此代码使用一个类为了“聚集”一些相关的领域。
优点是它非常灵活。该类没有任何成员。任何函数都可以决定添加哪些字段。不同的调用可以创建这个类的对象,并以不同的方式填充它们(所以,同时,您可以拥有与不同成员相同类的对象)。
这种灵活性也是一个骗局。这缺乏结构:查看代码并确定类将具有哪些成员更困难。获得这样一个对象并且迭代成员也不那么简单。最后,这个班级是一个极端的例子,没有encapsulation。
总之,我认为有更好的选择:
如果确实需要这种灵活性(这本身就是一个问题),你可能要考虑使用dict
代替。
result = {}
result['height'] = 32
result['width'] = 32
result['depth'] = 3
这是更清晰这里(恕我直言),其结果仅仅是字段的分组,而且更容易遍历使用dict
's methods领域。
如果不需要这种灵活性,并且它只是一种最小化代码量的方法,则应该考虑使用collections.namedtuple
。
import collections
CIFAR10Record = collections.namedtuple('CIFAR10Record', ['height', 'width', 'depth'])
谢谢你回答我的问题! – jiuses
@jiuses不客气。祝你好运。 –
“这样”你是指从外部分配实例的变量?没关系,只要这些成员变量也初始化为'__init__'中的某个成员变量,否则很难理解哪些成员变量存在。我不会说它有“优势”。顺便说一下,你的缩进是错误的。 – zvone