def __set__(object, attribute, value):
	'''
	__setattr__ is always called when an attribute is set,
	unlike __getattr__ that only triggers when an attribute is not found,
	this asymmetry is in fact part of the Python spec.
	note there is no __setattribute__

	In normal Python a property setter is not called before __setattr__,
	this is bad language design because the user has been more explicit
	in having the property setter.

	In PythonJS, property setters are called instead of __setattr__.
	'''

	if '__class__' in object and object.__class__.__setters__.indexOf(attribute) != -1:
		object[attribute] = value
	elif object in '__setattr__':
		object.__setattr__( attribute, value )
	else:
		object[attribute] = value
dataset/ETHPy150Open PythonJS/PythonJS/pythonjs/runtime/pythonpythonjs.py/__set__/swapped operands of `in`