org.python.core.PyFinalizableInstance Maven / Gradle / Ivy
// Copyright (c) Corporation for National Research Initiatives
// These are just like normal instances, except that their classes included
// a definition for __del__(), i.e. Python's finalizer. These two instance
// types have to be separated due to Java performance issues.
package org.python.core;
/**
* A python class instance with __del__ defined.
*
* This is a special class due to performance. Defining
* finalize() on a class, makes the class a lot slower.
*/
public class PyFinalizableInstance extends PyInstance
{
public PyFinalizableInstance(PyClass iclass) {
super(iclass);
}
// __del__ method is invoked upon object finalization.
protected void finalize() {
try {
instclass.__del__.__call__(this);
} catch (PyException exc) {
// Try to get the right method description.
PyObject method = instclass.__del__;
try {
method = __findattr__("__del__");
} catch (PyException e) { ; }
Py.stderr.println("Exception " +
Py.formatException(exc.type, exc.value, exc.traceback) +
" in " + method +
" ignored");
}
}
}