I'm trying to do the following: After performing a regex group search, I'm trying to assign the results to the class properties by a specific order. the number of results from the regex search varies from 1-5 values.
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
the problem is that for each loop iteration, instead of the class property, Properties_Pointers[i] gets the property's value (and of course in this case I can't assign the desired value to the property).
thanks.
Refer to attribute names instead, and use the setattr() function to store a new value on 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() lets you set attributes based on a variable, here taking from attributes; there is also a companion getattr() function to retrieve attributes dynamically.
setattr() will set the attributes of an object based on a string name.  You can rewrite ParseSymbol above:
    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
As a side note, you can iterate over both Pattern_groups.groups() and Pattern_Pointers simultaneously by using zip().  This cleans up the code by removing the index variable i and its incrementation:
        for pointer, group in zip(Properties_Pointers, Pattern_groups.groups()):
            setattr(self, pointer, group)
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With