func (obj *Base) CallMethodObject(name string, args *Tuple) (*Base, error) { cname := C.CString(name) defer C.free(unsafe.Pointer(cname)) f := C.PyObject_GetAttrString(obj.c(), cname) if f == nil { return nil, AttributeError.Err(name) } defer C.decref(f) if C.PyCallable_Check(f) == 0 { return nil, TypeError.Err("attribute of type '%s' is not callable", name) } ret := C.PyObject_CallObject(f, args.c()) return obj2ObjErr(ret) }
func (obj *BaseObject) CallMethodObjArgs(name string, args ...Object) (Object, error) { cname := C.CString(name) defer C.free(unsafe.Pointer(cname)) f := C.PyObject_GetAttrString(c(obj), cname) if f == nil { return nil, AttributeError.Err(name) } defer C.decref(f) if C.PyCallable_Check(f) == 0 { return nil, TypeError.Err("attribute of type '%s' is not callable", name) } t, err := PackTuple(args...) if err != nil { return nil, err } ret := C.PyObject_CallObject(f, c(t)) return obj2ObjErr(ret) }
// int PyCallable_Check(PyObject *o) // Determine if the object o is callable. Return 1 if the object is callable and 0 otherwise. This function always succeeds. // PyObject* PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw) // Return value: New reference. // Call a callable Python object callable_object, with arguments given by the tuple args, and named arguments given by the dictionary kw. If no named arguments are needed, kw may be NULL. args must not be NULL, use an empty tuple if no arguments are needed. Returns the result of the call on success, or NULL on failure. This is the equivalent of the Python expression apply(callable_object, args, kw) or callable_object(*args, **kw). // // New in version 2.2. func (self *PyObject) Check_Callable() bool { return int2bool(C.PyCallable_Check(self.ptr)) }