首页 > 解决方案 > 如何为 C 中实现的对象类型设置 __file__ 和 __module__?

问题描述

我在 C 代码中定义了一些自定义类型。

在基于这些开发 Python 代码时,我有时会遇到错误,当 Python 自己的getfile()函数(inside inspect.py)引发自己的异常时,这种错误会更加复杂:

TypeError('{!r} is a built-in class'.format(object))

因为我想查看底层的原始错误而不是上面的错误,所以我想知道是否可以将__module____file__属性添加到我自己的类型中。如何做到这一点?

文档似乎暗示,属性必须是对象的一部分——在像我这样的情况下显然是浪费,当类的所有实例的值完全相同时——我怎样才能使它们成为静态的?

如果我尝试实现特定于类型的属性管理,我会突然无法访问该类型的方法(因为现在它们被视为属性)。

这些属性是否可能与方法共存?我该怎么做?我的主要目标是 Python-3.x ...

标签: pythonpython-3.x

解决方案


tp_nameC 级类型定义的槽中,编写完全限定名称:

"your_module.YourClass"

类型对象的__module__将基于 设置tp_name。模块的__file__属性应该已经被自动处理了。


推荐阅读