После того, как объект был создан, я могу добавлять и удалять слоты по желанию, как я могу делать со словарем. Четные методы - это просто объекты, хранящиеся в слотах,
Будьте осторожны, говоря о слотах - __slots__
имеет особое значение в Python .
так что я, вероятно, тоже могу добавлять методы в словарь.
foo = {}
foo.bar = 1
AttributeError: 'dict' object has no attribute 'bar'
Не по умолчанию, вам нужно создать его подкласс - но тогда вы используете класс. Вместо этого поместите функцию в словарь:
def bar():
return 1
foo['bar'] = bar
foo['baz'] = lambda: 1
Могу ли я что-то сделать с объектом, которого никогда не смогу сделать со словарем?
Этот вопрос на самом деле имеет ложную предпосылку - словари являются объектами , поэтому все, что вы делаете со словарем , вы делаете с объектом . В остальной части этого ответа я буду притворяться, что вы имеете в виду «пользовательский класс», когда говорите «объект».
Нет, вы ничего не можете сделать с пользовательским классом, который вы не можете сделать со словарем. Классы даже реализованы со словарем.
class Foo(object):
pass
print Foo.__dict__
# {'__dict__': <attribute '__dict__' of 'Foo' objects>, '__module__': '__main__',
# '__weakref__': <attribute '__weakref__' of 'Foo' objects>, '__doc__': None}
Все, что вы можете сделать с классом в Python, вы можете сделать без него, с большим количеством работы (и кода, который намного сложнее понять, использовать и поддерживать). Говорят даже, что классы Python - просто синтаксический сахар для словарей.
Совсем недавно был задан очень похожий вопрос: Нужно ли мне изучать объекты или я могу сэкономить время и просто изучать словари? Думаю, мой ответ на этот вопрос также уместен здесь.