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