65 lines
2.1 KiB
ReStructuredText
65 lines
2.1 KiB
ReStructuredText
|
Differences with Python
|
||
|
=======================
|
||
|
|
||
|
* ``py.js`` completely ignores old-style classes as well as their
|
||
|
lookup details. All ``py.js`` types should be considered matching
|
||
|
the behavior of new-style classes
|
||
|
|
||
|
* New types can only have a single base. This is due to ``py.js``
|
||
|
implementing its types on top of Javascript's, and javascript being
|
||
|
a single-inheritance language.
|
||
|
|
||
|
This may change if ``py.js`` ever reimplements its object model from
|
||
|
scratch.
|
||
|
|
||
|
* Piggybacking on javascript's object model also means metaclasses are
|
||
|
not available (:js:func:`py.type` is a function)
|
||
|
|
||
|
* A python-level function (created through :js:class:`py.PY_def`) set
|
||
|
on a new type will not become a method, it'll remain a function.
|
||
|
|
||
|
* :js:func:`py.PY_parseArgs` supports keyword-only arguments (though
|
||
|
it's a Python 3 feature)
|
||
|
|
||
|
* Because the underlying type is a javascript ``String``, there
|
||
|
currently is no difference between :js:class:`py.str` and
|
||
|
:js:class:`py.unicode`. As a result, there also is no difference
|
||
|
between :js:func:`__str__` and :js:func:`__unicode__`.
|
||
|
|
||
|
Unsupported features
|
||
|
--------------------
|
||
|
|
||
|
These are Python features which are not supported at all in ``py.js``,
|
||
|
usually because they don't make sense or there is no way to support them
|
||
|
|
||
|
* The ``__delattr__``, ``__delete__`` and ``__delitem__``: as
|
||
|
``py.js`` only handles expressions and these are accessed via the
|
||
|
``del`` statement, there would be no way to call them.
|
||
|
|
||
|
* ``__del__`` the lack of cross-platform GC hook means there is no way
|
||
|
to know when an object is deallocated.
|
||
|
|
||
|
* ``__slots__`` are not handled
|
||
|
|
||
|
* Dedicated (and deprecated) slicing special methods are unsupported
|
||
|
|
||
|
Missing features
|
||
|
----------------
|
||
|
|
||
|
These are Python features which are missing because they haven't been
|
||
|
implemented yet:
|
||
|
|
||
|
* Class-binding of descriptors doesn't currently work.
|
||
|
|
||
|
* Instance and subclass checks can't be customized
|
||
|
|
||
|
* "poor" comparison methods (``__cmp__`` and ``__rcmp__``) are not
|
||
|
supported and won't be falled-back to.
|
||
|
|
||
|
* ``__coerce__`` is currently supported
|
||
|
|
||
|
* Context managers are not currently supported
|
||
|
|
||
|
* Unbound methods are not supported, instance methods can only be
|
||
|
accessed from instances.
|