我正在尝试执行以下操作: 执行正则表达式组搜索后,我尝试按特定顺序将结果分配给类属性。正则表达式搜索的结果数量从1-5个值不等。
class Classification():
def __init__(self, Entry):
self.Entry = Entry
self.Section = ''
self.Class = 'Null'
self.Subclass = 'Null'
self.Group = 'Null'
self.Subgroup = 'Null'
def ParseSymbol(self,regex):
Properties_Pointers = [self.Section,self.Class,self.Subclass,self.Group,self.Subgroup]
Pattern_groups = re.search(regex, self.Symbol)
i = 0
for group in Pattern_groups.groups():
Properties_Pointers[i] = group
i += 1
问题是,对于每个循环迭代,而不是类属性,Properties_Pointers[i]
获取属性的值(当然,在这种情况下,我无法将所需的值分配给属性)。
感谢。
答案 0 :(得分:3)
请参阅属性名称,并使用setattr()
function在self
上存储新值:
def ParseSymbol(self, regex):
attributes = ['Section', 'Class', 'Subclass', 'Group', 'Subgroup']
Pattern_groups = re.search(regex, self.Symbol)
for group, attr in zip(Pattern_groups.groups(), attributes):
setattr(self, attr, group)
setattr()
允许您根据变量设置属性,此处取自attributes
;还有一个伴随getattr()
function来动态检索属性。
答案 1 :(得分:1)
setattr()
将根据字符串名称设置对象的属性。您可以在上面重写ParseSymbol
:
def ParseSymbol(self,regex):
Properties_Pointers = ['Section','Class','Subclass','Group','Subgroup']
Pattern_groups = re.search(regex, self.Symbol)
i = 0
for group in Pattern_groups.groups():
setattr(self, Properties_Pointers[i], group)
i += 1
作为旁注,您可以使用zip()
同时迭代Pattern_groups.groups()
和Pattern_Pointers
。这通过删除索引变量i
及其增量来清除代码:
for pointer, group in zip(Properties_Pointers, Pattern_groups.groups()):
setattr(self, pointer, group)
答案 2 :(得分:0)
如果您知道正则表达式将始终包含相同数量的组,则可以使用元组解包:
self.Section, self.Class, self.Subclass,self.Group, self.Subgroup = Pattern_groups.groups()