Is it possible to loop over enumerated object names in python? Or maybe there's a better way?

23 hours ago 1
ARTICLE AD BOX

I have written some extremely similar code, where the only difference is in the enumerated object names. Hence, I would like to loop over object names. Is this possible in Python?

Or maybe there's a better way I hadn't considered to work with multiple objects whose names are enumerated.

More detail is provided in a comment in the MWE.

This is the current output.

[1, 2, 3, 4, 5, 6, 7, 8, 9] UnionSet(set1=UnionSet(set1=TangiSet(elems=[1, 2, 3]), set2=TangiSet(elems=[4, 5, 6])), set2=TangiSet(elems=[7, 8, 9])) from dataclasses import dataclass @dataclass(frozen=True) class FinSet: "A finite set." @dataclass(frozen=True) class TangiSet(FinSet): "A tangible set." elems: list def list_elems(self): return sorted(self.elems) @dataclass(frozen=True) class UnionSet(FinSet): "A union of finite sets" set1: FinSet set2: FinSet def list_elems(self): val = [] # These two code blocks are extremely similar. # The only difference is that I replaced the object name # "set1" with "set2" in some places. # Is there a way to loop over object names when they are numbered? if isinstance(self.set1, TangiSet): val.extend(self.set1.list_elems()) elif isinstance(self.set1, UnionSet): assert isinstance(self.set1.set1, UnionSet | FinSet) assert isinstance(self.set1.set2, UnionSet | FinSet) val.extend(self.set1.set1.list_elems()) val.extend(self.set1.set2.list_elems()) if isinstance(self.set2, TangiSet): val.extend(self.set2.list_elems()) elif isinstance(self.set2, UnionSet): assert isinstance(self.set2.set1, UnionSet | FinSet) assert isinstance(self.set2.set2, UnionSet | FinSet) val.extend(self.set2.set1.list_elems()) val.extend(self.set2.set2.list_elems()) return sorted(val) def main(): P = TangiSet([1, 2, 3]) Q = TangiSet([4, 5, 6]) R = TangiSet([7, 8, 9]) S = UnionSet(P, Q) T = UnionSet(S, R) print(T.list_elems()) print(T) if __name__ == "__main__": main()
Read Entire Article