gpt4 book ai didi

python - python中实例变量和属性之间的区别?

转载 作者:太空宇宙 更新时间:2023-11-04 02:16:50 24 4
gpt4 key购买 nike

因此,writing extension 的 python 文档是这样说的:

"We want to expose our instance variables as attributes. There are a number of ways to do that. The simplest way is to define member definitions:

static PyMemberDef Noddy_members[] = {
{"first", T_OBJECT_EX, offsetof(Noddy, first), 0,
"first name"},
{"last", T_OBJECT_EX, offsetof(Noddy, last), 0,
"last name"},
{"number", T_INT, offsetof(Noddy, number), 0,
"noddy number"},
{NULL} /* Sentinel */
};

and put the definitions in the tp_members slot:

Noddy_members,             /* tp_members */"

但是,我们已经将实例变量放在了 Noddy 结构中:

 typedef struct {
PyObject_HEAD
PyObject *first;
PyObject *last;
int number;
} Noddy;

所以我的问题是为什么我们将它们放在两个地方。我的印象是,那是因为我们希望类型和实例都拥有它们,以便在实例更新后我们保留类型值。但如果是这样的话,如果我们更改类属性,实例值如何更新?像这样:

>>> class foo(object): x = 4
...
>>> f = foo()
>>> f.x
4
>>> foo.x = 5
>>> f.x
5

最佳答案

编写 C 扩展是一个复杂的过程,因为您必须编写 C 代码,并且必须向 Python 提供足够的信息,以便它可以像处理 Python 数据一样处理您的 C 数据。您必须两次提及结构的成员:一次是为了让 C 编译器知道如何创建结构,然后再一次是为了让 Python 知道数据在哪里以及它被调用什么。

C 没有自省(introspection)能力,因此您不能(例如)在运行时获取结构的成员列表。 PyMemberDef 数组提供了该信息。

关于python - python中实例变量和属性之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6539271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com