PyObject 是除了 PyCore 之外,所有其他类型的基类。非内置类的对象是 PyObject 的实例。PyObject 实现了 4 个魔术方法,用于将操作映射到 Python 对象。
所有类方法、参数、返回值参考 stubs 目录中的文件,文档不再介绍。
PyObject:所有其他类型的基类PyDict:字典类型,等同于PHP的关联数组PyList:列表类型,等同于PHP的索引数组PyTuple:元组,不可变的列表PyStr:字符串PyModule:Python包,PyModule也是PyObject的子类
PyObject -> PyModule
-> PySequenece -> PyList
-> PyTuple
-> PySet
-> PyStr
-> PyDict
-> PyType
读取 Python 对象的属性,以下操作是等价的
$pyobj->attr;pyobj.attr设置 Python 对象的属性,以下操作是等价的
$pyobj->attr = 'hello';pyobj.attr = 'hello'调用 Python 对象的方法,以下操作是等价的
$pyobj->fn($a, $b, $c);pyobj.fn(a, b, c)执行 callable 对象,通常用于执行函数、构造对象。以下操作是等价的
// $user 是一个 PyModule
$user = PyCore::import('app.user');
// Info 是 app.user 中的一个类
$Info = $user->Info;
// 创建一个 Info 对象
$info = $Info('Rango', 2023);from app.user import Info
// 创建一个 Info 对象
info = Info('Rango', 2023);支持命名参数写法。实例:
kwargs($a, $b, $c, name: 'hello', world: 'rango');- 顺序参数必须在前,命名参数必须在最后
function kwargs($a, $b, $c, $name, $world) {
}function kwargs(...$kwargs) {
var_dump($kwargs);
}$kwargs将包含顺序参数和命名参数两部分,例如刚才的例子中就或获得
array(
0 => $a,
1 => $b,
2 => $c,
'name' => 'hello',
'world' => 'rango',
)function kwargs(...$kwargs) {
kwargs_fn2(...$kwargs);
}可将命名参数传递给另外函数。