Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с пайтоном

Николай Минаев Мастер (1123), на голосовании 1 месяц назад
попробую объяснить в чем мне нужна помощь. у меня есть множество переменных и классов с таким же названием как и содержимое переменных, можно ли записать данный код проще, а то не очень хочется для десятков переменных писать подобные конструкции:

х = "палка"
сlass палка:
name = 'stik'
def menu():
if x == "палка":
print( палка.name )
print(menu())
Голосование за лучший ответ
Максим Лебедев Знаток (385) 2 месяца назад
1. Словарь (рекомендуется):

classes = {
"палка": type("palca", (), {"name": 'stik'}),
"дерево": type("derevo", (), {"name": 'wood'}),
"камень": type("kamien", (), {"name": "stone"})
}

x = "палка"
if x in classes:
print(classes[x].name)
2. globals() (с осторожностью):

class palca:
name = 'stik'

class derevo:
name = 'wood'

class kamien:
name = "stone"

x = "палка"

if x in globals() and hasattr(globals()[x], 'name'):
print(globals()[x].name)
3. eval() (не использовать!):

class palca:
name = 'stik'
class derevo:
name = 'wood'
class kamien:
name = "stone"
x = "палка"

if x in globals() and hasattr(eval(x), 'name'):
print(eval(x).name)
Объяснение (очень кратко):

Словарь: сопоставляет имя переменной с классом, доступ к имени через classes[x].name.
globals(): Ищет класс в глобальной области видимости, проверяет наличие name, выводит name.
eval(): Выполняет строку как код (опасен!).
Какой выбрать?

Словарь (первый вариант) - лучший по безопасности и читаемости.
globals() - используйте с осторожностью.
eval() - НИКОГДА!

((Сделано с использованием чата гпт))
Николай МинаевМастер (1123) 2 месяца назад
сможете объяснить что означают слова в этом участке кода?
classes = {
"палка": type("palca", (), {"name": 'stik'}),
"дерево": type("derevo", (), {"name": 'wood'}),
"камень": type("kamien", (), {"name": "stone"})
}
Похожие вопросы