Можно ли перебирать перечисляемые имена объектов в Python? Или, может быть, есть лучший способ?Python

Программы на Python
Ответить
Anonymous
 Можно ли перебирать перечисляемые имена объектов в Python? Или, может быть, есть лучший способ?

Сообщение Anonymous »

Я написал очень похожий код, единственное отличие которого заключается в перечисляемых именах объектов. Следовательно, я хотел бы перебирать имена объектов. Возможно ли это в Python?
Или, может быть, есть лучший способ, о котором я не думал, для работы с несколькими объектами, имена которых перечисляются.
Более подробная информация представлена ​​в комментарии в MWE.
Это текущий результат.
[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()
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»