@Retention(value=RUNTIME)
@Target(value=METHOD)
public @interface ExposedNew
Can appear on two forms of methods to indicate a method should be part of the __new__ object creation. Can only appear once per exposed type.
In the first form, the method must be static and take the arguments
PyNewWrapper new_, boolean init, PyType
subtype, PyObject[] args, String[] keywords
. In this case, the method has full
responsibility for creating and initting the object and will be invoked for every subtype of this
exposed type. Essentially it's for object instantiation that must be called for every instance of
that object. See PyInteger.int_new(org.python.core.PyNewWrapper, boolean, org.python.core.PyType, org.python.core.PyObject[], java.lang.String[])
for an example of this type of ExposedNew.
In the second form, the method must be an instance method that takes the standard Jython call
arguments, PyObject[] args, String[] keywords
. In this case, the basic new
functionality is handled by PyOverridableNew and the method with ExposedNew is called as __init__
as part of that process. This allows subtypes to completely redefine new and create objects
however they like.