- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
下面的 python-c 代码可以正确编译
#include <Python.h>
#include <structmember.h>
struct rangerr {
long min;
long max;
};
//Python type to represent rangerr
struct py_rangerr {
PyObject_HEAD
struct rangerr range;
};
// * get & set methods for py_rangerr
static PyObject * py_rangerr_min_get(struct py_rangerr *self) {
self->range.min = 1;
return PyLong_FromLong(self->range.min);
}
static PyObject * py_rangerr_min_set(struct py_rangerr *self) {
printf("Setter called");
self->range.min = 1;
}
static PyObject * py_rangerr_max_get(struct py_rangerr *self) {
self->range.max = 10;
return PyLong_FromLong(self->range.max);
}
//* GetSet method definition for py_rangerr
static PyGetSetDef py_rangerr_getset[] = {
{"min",(getter)py_rangerr_min_get, (setter)py_rangerr_min_set, "min",NULL},
{"max",(getter)py_rangerr_max_get, NULL, "max",NULL},
/* Sentinel */
{NULL},
};
/******************************************************************************
*/
static void py_rangerr_dealloc(struct py_rangerr *self) {
self->ob_type->tp_free((PyObject *)self);
}
static PyTypeObject py_rangerr_type = {
PyObject_HEAD_INIT(NULL)
.tp_name = "rangerr",
.tp_basicsize = sizeof(struct py_rangerr),
.tp_dealloc = (destructor) py_rangerr_dealloc,
.tp_flags = Py_TPFLAGS_DEFAULT,
.tp_alloc = PyType_GenericAlloc,
.tp_doc = "rangerr",
.tp_getset = py_rangerr_getset,
};
void
initrangerr(void)
{
PyObject* mod;
mod = Py_InitModule3("rangerr", NULL, "An extension with a type.");
if (mod == NULL) {
return;
}
py_rangerr_type.tp_new = PyType_GenericNew;
if (PyType_Ready(&py_rangerr_type) < 0){
return;
}
Py_INCREF(&py_rangerr_type);
PyModule_AddObject(mod, "rangerr", (PyObject*)&py_rangerr_type);
}
但是当我尝试调用 set/get 方法时,它会抛出以下错误:
>>> import rangerr as r
>>> r.rangerr.min
<attribute 'min' of 'rangerr' objects>
>>> r.rangerr.min=2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't set attributes of built-in/extension type 'rangerr'
>>> type(r.rangerr.min)
<type 'getset_descriptor'>
我需要添加类似“PyMemberDef”的内容吗?感谢您的任何指示或帮助。
最佳答案
不可能直接为参数设置默认值。您可以向模块添加一个函数,将全局默认值设置为静态变量。
如果您只想初始化实例,则应该定义 PyTypeObject.tp_init
喜欢
static int py_rangerr_init(struct py_rangerr *self, PyObject *args, PyObject *kwds) {
static char *kwlist[] = {"min", "max", NULL};
int min = 0, max = 1;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|ii", kwlist, &min, &max))
return -1;
self->range.min = min;
self->range.max = max;
return 0;
}
static PyTypeObject py_rangerr_type = {
PyObject_HEAD_INIT(NULL)
[...]
.tp_init = (initproc) py_rangerr_init,
};
如果您没有为 min
提供值或max
,行 int min = 0, max = 1;
中的默认值将被使用。
关于您关于 PyMemberDef
的使用的问题,对于像 int
这样的类型使用 PyTypeObject.tp_members
可能会减少重复性且不易出错而不是PyTypeObject.tp_getset
.
此外setter的typedef是:
typedef int (*setter)(PyObject *, PyObject *, void *);
关于python - 添加新的 python 类型 : TypeError: can't set attributes of built-in/extension type,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985786/
我正在使用 Kotlin 和 Dagger 2 开发一个 Android 项目。我有一个 NetworkModule它应该提供 Retrofit 的单例实例。我在其中定义了所有这些提供程序功能。 下面
我从 util/buildscripts/build.sh 构建 dojo 并包含我的自定义模块导致层文件(示例 dojo.js)仅包含文本“//>>built”。 最佳答案 这里讨论了问题并解决了问
这个问题在这里已经有了答案: How to unhide an overriden function? (1 个回答) 关闭 9 年前。 在我的 Matlab 路径上有一个自定义的 zeros 函数
我试图找到一个内置的几何平均值,但找不到。 (显然,在 shell 中工作时,内置函数不会为我节省任何时间,我也不怀疑准确性有任何差异;对于脚本,我尝试尽可能频繁地使用内置函数,其中(累积)性能提升通
我想知道在 keycloak (KL) 中是否可以分析身份验证日志(尝试次数、错误等),如果 KL 已经提供了这样做的东西,或者我必须构建它。欢迎提出任何建议。 谢谢尼古拉 最佳答案 Keycloak
我想知道在 keycloak (KL) 中是否可以分析身份验证日志(尝试次数、错误等),如果 KL 已经提供了这样做的东西,或者我必须构建它。欢迎提出任何建议。 谢谢尼古拉 最佳答案 Keycloak
据我所知,Python builtins 指的是那些包含在__builtins__ 中的异常和函数: >>> import builtins # import __builtin__ in Pyth
我想修改currency过滤以处理输入值中的自定义货币格式。 (例如,AUD 3.00 -> $3.00)。 一种选择是从头开始编写我自己的过滤器。然而,这似乎有很多重复,鉴于现有的过滤器很棒,我只需
我正在深入研究一些 C 内部结构,我从 clang 的 stddef.h 中找到了以下行(位于 /usr/lib/llvm-11/lib/clang/11.0 .0/include/): typede
这是一个由两部分组成的部分:首先,定义一个函数,distance_from_zero,带有一个参数(选择您喜欢的任何参数名称)。 其次,让该函数执行以下操作: 检查它接收到的输入的类型。如果类型为 i
我创建了一个接受 event 的函数对象并使用 .clientX 和 .clientY 属性做一些事情。基于我传递的是整个对象,而不仅仅是我将使用的属性,是否存在任何性能问题?这个对象是通过引用传递的
我目前正在从 ECMA 学习 JavaScript Manual ,我对内置对象的概念感到困惑。我知道像Function、Object、Math这样的对象是内置对象,你可以直接使用它们,例如Math
我想对我正在构建的小型应用程序使用潜在语义分析,但我不想自己构建矩阵。 (部分是因为我拥有的文档不会成为一个很好的培训集合,因为它们有点短且异构,部分是因为我刚买了一台新计算机,我发现安装线性代数之类
我是 C++ 的初学者,所以如果答案很明显,它可能就是我正在寻找的答案。我正在阅读 this thread 中的第二个回复并感到困惑。 #include #include int main() {
我需要用字符串构建一个对象属性但是我怎么能使用这个字符串的值作为属性名呢? var x = 'a'; var y = 'b'; var xy = x + y; var z = { xy: 's
我目前正在使用 java 中的 play 框架 2.2.6 开发一个应用程序。我的系统需要区分两个用户角色:管理员和用户。 到目前为止,我知道使用 Security.Authenticator 类来防
提问界面标记了许多“可能已经有您的答案的问题”,但我已尝试进行尽职调查以检查是否有任何人在问我在这里的确切内容。如果这是重复的,我深表歉意。 假设我有以下不正确的程序: extern void und
我需要在主屏幕上有相对缓慢移动的图像(有些像动态壁纸),我想知道,就 CPU 负载而言,Android 动画类是否适合这种情况? 我担心的是 android 动画以最高帧速率不断运行,有时它会连续几个
我想知道是否可以从 java.util.stream.Collectors 扩展内置的 Java Stream 收集器类,而不是从头开始构建自定义收集器,因此复制已经在该类中实现的代码。 例如:假设我
以下是我使用 Python 3.8.1(在 macOS Mojave,10.14.6 上,作为 以及其他一些平台上的 Python 3.7(或更旧的))。我是新来的 计算,不知道如何要求改进 语言,但
我是一名优秀的程序员,十分优秀!