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;
}