package org.python.core;
public class PySlot extends PyDescriptor {
public PySlot(PyType dtype, String name, int index) {
this.name = name;
this.dtype = dtype;
this.index = index;
}
public boolean implementsDescrSet() {
return true;
}
public boolean isDataDescr() {
return true;
}
public PyObject __get__(PyObject obj, PyObject type) {
if (obj != null) {
checkType((PyType) type);
return ((Slotted) obj).getSlot(index);
}
return this;
}
public void __set__(PyObject obj, PyObject value) {
checkType(obj.getType());
((Slotted) obj).setSlot(index, value);
}
public void __delete__(PyObject obj) {
checkType(obj.getType());
((Slotted) obj).setSlot(index, null);
}
public String toString() {
return "<member '" + name + "' of '" + dtype.fastGetName() + "' objects>";
}
private void checkType(PyType type) {
if (type != dtype && !type.isSubType(dtype))
throw get_wrongtype(type);
}
private int index;
}