package org.python.core; public class PyBuiltinMethodSet extends PyBuiltinFunctionSet implements Cloneable { public PyBuiltinMethodSet(String name, int index, int minargs, int maxargs, String doc, Class type) { super(name, index, minargs, maxargs, doc); this.type = type; } public PyObject __get__(PyObject obj, PyObject type) { if (obj != null) { if (this.type.isAssignableFrom(obj.getClass())) { return bind(obj); } else { throw Py.TypeError("descriptor '" + info.getName() + "' for '" + PyType.fromClass(this.type) + "' objects doesn't apply to '" + obj.getType() + "' object"); } } return this; } public PyBuiltinFunction bind(PyObject bindTo) { if (__self__ == Py.None) { PyBuiltinMethodSet bindable; try { bindable = (PyBuiltinMethodSet) clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException( "Didn't expect PyBuiltinMethodSet to throw CloneNotSupported since it implements Cloneable: " + e); } bindable.__self__ = bindTo; return bindable; } return this; } public PyObject getSelf() { return __self__; } public String toString() { return "<built-in method " + info.getName() + ">"; } private Class type; protected PyObject __self__ = Py.None; }