Python против JavaScript: объекты
Объект Python
В Python на самом деле есть два типа объектов. Один — более примитивный, создается вызовом object()
— он возвращает новый экземпляр встроенного класса object
. И еще одно, более распространенное, расширение первого, созданное путем создания экземпляра класса. Как говорит doc, объекты, созданные непосредственно из object()
, не имеют признаков и не имеют __dict__
, поэтому вы не можете назначать им произвольные атрибуты. Есть несколько вариантов использования таких более простых объектов — например, если вам нужна просто уникальная ссылка — например, часовой. С другой стороны, все пользовательские классы по умолчанию имеют __dict__
(если только они не изменены пользователем), поэтому они больше напоминают стандартный объект JS.
JS-объект
Точно так же и в Python, и в JavaScript мы можем различать два типа объектов. Но они отличаются по-разному. Мы можем создать стандартный объект JS, используя, например, литерал объекта — {}
. Или — мы также можем использовать Object.create(null)
, который создает действительно пустой объект, прототип которого равен null. Эта более пустая версия объекта работает так же, как и его полная версия, за исключением того факта, что она не имеет родных методов прототипа объекта, таких как: .toString()
, .valueOf()
, .hasOwnProperty()
и т. д. как стандартный объект JS.
Сравнение
Ниже приведено простое сравнение реализации Object на обоих языках. Чтобы избежать слишком широкого охвата объектно-ориентированных концепций, таких как классы или наследование, мы не рассматриваем это сравнение. Свойства и атрибуты используются как взаимозаменяемые значения, установленные на объекте для заданных ключей. Предполагается Python 3 и «современный» JS-движок (V8, SpiderMonkey, JavaScriptCore).
Временная сложность общих операций
Рецепты общих объектов
Использованная литература:
• https://docs.python.org/3/reference/datamodel.html
• https://docs.python.org/3/library/functions.html#object
• https://wiki.python.org/moin/TimeComplexity
• https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
• https://v8.dev/blog/fast-properties