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);
}
可将命名参数传递给另外函数。