This commit is contained in:
BLUELOVETH 2023-08-24 14:51:55 +08:00
parent 9def55bf55
commit cfe1f56489

View File

@ -129,6 +129,28 @@ Access extended python types
PyObject* voidp_t = VoidP::_type(vm);
```
Check if an object is a python type
```cpp
PyObject* obj;
bool ok = is_type(obj, vm->tp_int); // check if obj is an int
```
Get the type of a python object
```cpp
PyObject* obj = VAR(1);
PyObject* t = vm->_t(obj); // <class 'int'>
```
Convert a type object into a type index
```cpp
PyObject* int_t = vm->_t(vm->tp_int);
Type t = PK_OBJ_GET(Type, int_t);
// t == vm->tp_int
```
## Access attributes
Check an object supports attribute access
@ -187,7 +209,68 @@ const static StrName m_sum("sum");
PyObject* ret = vm->call_method(obj, m_sum);
```
## Bind native functions
## Special operations
Compare two python objects
```cpp
PyObject* obj1 = VAR(1);
PyObject* obj2 = VAR(2);
bool ok = vm->py_equals(obj1, obj2);
```
Convert a python object to string
```cpp
PyObject* obj = VAR("123");
PyObject* s = vm->py_str(obj); // 123
```
Get the string representation of a python object
```cpp
PyObject* obj = VAR("123");
std::cout << vm->py_repr(obj); // '123'
```
Get the JSON representation of a python object
```cpp
PyObject* obj = VAR("123");
std::cout << vm->py_json(obj); // "123"
```
Get the hash value of a python object
```cpp
PyObject* obj = VAR(1);
i64 h = vm->py_hash(obj); // 1
```
Get the iterator of a python object
```cpp
PyObject* obj = vm->eval("range(3)");
PyObject* iter = vm->py_iter(obj);
```
Get the next item of an iterator
```cpp
PyObject* obj = vm->py_next(iter);
if(obj == vm->StopIteration){
// end of iteration
}
```
Convert a python iterable to a list
```cpp
PyObject* obj = vm->eval("range(3)");
PyObject* list = vm->py_list(obj);
```
## Bindings
Bind a native function