在Python中以这种方式创建类和实例有哪些优缺点?

问题描述:

class CIFAR10Record(object): 
    pass 

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

这段代码创建一个类及其实例。在Python中以这种方式创建类和实例有哪些优缺点?

这种模式的优点和缺点是什么?

+0

“这样”你是指从外部分配实例的变量?没关系,只要这些成员变量也初始化为'__init__'中的某个成员变量,否则很难理解哪些成员变量存在。我不会说它有“优势”。顺便说一下,你的缩进是错误的。 – zvone

此代码使用一个类为了“聚集”一些相关的领域。

优点是它非常灵活。该类没有任何成员。任何函数都可以决定添加哪些字段。不同的调用可以创建这个类的对象,并以不同的方式填充它们(所以,同时,您可以拥有与不同成员相同类的对象)。

这种灵活性也是一个骗局。这缺乏结构:查看代码并确定类将具有哪些成员更困难。获得这样一个对象并且迭代成员也不那么简单。最后,这个班级是一个极端的例子,没有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']) 
+0

谢谢你回答我的问题! – jiuses

+0

@jiuses不客气。祝你好运。 –