Я задавался вопросом о том же. Мне нравится удобство x.foo
вместо x["foo"]
; одну точку гораздо легче напечатать (и сделать это правильно), чем все [""]
.
Преимущество dict в том, что ключом может быть что угодно. (Ну, все, что можно хешировать.) Но когда у меня есть набор значений, которые я хочу просто объединить, имена ключей, которые я выбираю, в любом случае являются допустимыми идентификаторами.
Вот основная версия этой идеи:
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. Но я понимаю, почему это было не так: сохранить язык небольшим и чистым — достойная цель, и эту функцию тривиально легко написать самостоятельно.
person
steveha
schedule
13.11.2009