Skip to content

Instantly share code, notes, and snippets.

@shivamMg
Created November 1, 2020 10:06
Show Gist options
  • Save shivamMg/97a9a07a1efd0b5b5f18147ab1681747 to your computer and use it in GitHub Desktop.
Save shivamMg/97a9a07a1efd0b5b5f18147ab1681747 to your computer and use it in GitHub Desktop.
JavaScript objects in python
class JSObject:
def __init__(self):
self.__dict__['_props'] = {}
def __setattr__(self, name, value):
self.__dict__['_props'][name] = value
def __getattr__(self, name):
return self.__dict__['_props'].get(name)
def __setitem__(self, name, value):
self.__dict__['_props'][name] = value
def __getitem__(self, name):
return self.__dict__['_props'].get(name)
class JSArray(list, JSObject):
def __init__(self, *args, **kwargs):
JSObject.__init__(self)
super().__init__(*args, **kwargs)
def __setitem__(self, name, value):
if isinstance(name, int) and name >= 0:
list.__setitem__(self, name, value)
else:
JSObject.__setitem__(self, name, value)
def __getitem__(self, name):
if isinstance(name, int) and name >= 0:
return list.__getitem__(self, name)
return JSObject.__getitem__(self, name)
def __repr__(self):
out = ''
for i, item in enumerate(self):
out += f'{i}: {item}\n'
for key, value in self._props.items():
out += f'{key}: {value}\n'
return out
x = JSArray([1, 2, 3])
x[-1] = 'lol'
x.answer = 42
print(x)
# Output:
# 0: 1
# 1: 2
# 2: 3
# -1: lol
# answer: 42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment