我有一个情况,我会有很多列表,每个列表中的值都需要在一些有效值中。但是,对于每个列表,有效值的集合是不同的。因此,在对这些列表进行任何附加之前,我必须检查成员资格,这会导致大量重复的代码。我发现自己很想扩展list对象,这样就不必一遍又一遍地进行成员资格检查了。在
class Attribute(list):
def __init__(self,validList):
self.valid = validList
def append(self,inString):
if inString not in self.valid:
raise Exception, '%s is not a valid value for this attribute' % inString
if inString not in self:
super(Attribute,self).append(inString)
这样我就可以让我的每个列表具有不同的有效值集。但是,我觉得扩展内置对象通常不是一个好主意,我过去一直避免这样做。所以我的问题是
Overriding append method after inheriting from a Python List有助于使此代码正常工作。在
我想您可以选择任何一种方式,但通常我都避免将list子类化。例如,我可能创建自己的集合对象而不是子类化。在
在您的情况下,我只需过滤每个列表以检查成员资格。除非你要处理大量的记录集,否则这可能不是问题。在
至于你为什么append不起作用的问题,那是因为你试图附加一个列表,而不是一个列表项。您可以通过使它}。在
list.append(inString)
来解决这个问题。如果在某个时候您想将列表组合在一起,可以使用list.extend(other_list)
或{另一方面,Python中的大多数人为了可读性都遵循PEP-8语法。这意味着
inString
将被命名为in_string
。在相关问题 更多 >
编程相关推荐