Я удивлялся тому же. Мне нравится удобство x.foo
вместо x["foo"]
; один период гораздо проще набрать (и получить правильный), чем все [""]
.
Преимущество диктанта в том, что ключом может быть что угодно . (Ну, что-нибудь хешируемое.) Но когда у меня есть куча значений, которые я хочу просто связать вместе, выбранные имена ключей в любом случае являются действительными идентификаторами.
Вот базовая версия этой идеи:
class struct(object):
pass
x = struct()
x.foo = 1
Пока вы идете к этой большой проблеме, вы могли бы также добавить __init__()
, который обрабатывает kwargs
для удобной инициализации. Но мне лень и я надеялся на что-то встроенное.
Я попробовал это, но это не работает:
x = object()
x.foo = 1 # raises AttributeError exception
Я спросил об этом, и я получил ответ, что object
является корнем всех типов в Python; это как можно меньше. Если бы он мог действовать как экземпляр класса со своим собственным атрибутом __dict__
, то каждый объект, когда-либо созданный в Python, нуждался в прикрепленном __dict__
.
Мне бы хотелось, чтобы struct
был добавлен в качестве встроенного в Python 3.x. Но я понимаю, почему этого не произошло: поддерживать язык маленьким и чистым - это достойная цель, и эту функцию легко написать самостоятельно.