python - PySide2 (5.11.x):无法在 Python 2.7 中调用 type(QtWidgets.QWidget).__new__
问题描述
我们有一个基于type(QtWidgets.QWidget)
- 解析为Shiboken.ObjectType
- 我们在生产中拥有的元类,它可以追溯到 PySide/Qt4,它破坏了 pypy (5.11.x) 上的 PySide2 版本。PySide2 的早期 alpha 版本(2.0.0~alpha0)没有这个问题。
如果您使用 PySide2 的 5.11.x 版本从 Python 2.7 调用以下内容,您会看到它看起来好像Shiboken.ObjectType
是在传递它被赋予的参数type.__new__
,这是不允许的。
这行代码只是为了说明问题而设计的,因此使用了空名称、父级和 class_dict 参数,并按原样传递类型。在我们的生产代码中,这将是我们定义的元类,其余参数将从输入 args/kwargs 传递:
type(QtWidgets.QWidget).__new__(type(QtWidgets.QWidget), "", (), {})
在 PySide2 5.11.x 中,提出了以下问题:
TypeError: Shiboken.ObjectType.__new__(Shiboken.ObjectType) is not safe, use type.__new__()
在 PySide/Qt4 或 PySide2 2.0.0~alpha0 中,会出现正确的返回:
<class '__main__.'>
以前有没有人反对过这个?我们是在做一些根本错误的事情,还是我们可以采用一种解决方法?shiboken2 中的某些内容发生了变化,但我不确定这是否是一个错误,或者我们的代码是否完全不正确,并且我们可以进行一些调整以使其正常工作。
解决方案
推荐阅读
- c# - 计数在文本文件中找到我的数组中的字符串的次数
- android - Android Studio Loaders 自 Android P (API 28) 起已被弃用?
- css - 固定位置不适用于 Safari 移动设备
- amazon-web-services - 插入时的 Redshift 异常
- swift - 在 Swift 中,如何在不实际调用该方法的情况下测试一个对象是否实现了一个通过签名不同的可选协议方法?
- python - 按日期python重命名文件夹中的文件
- java - Spring中通过字段的不满意的依赖错误
- .htaccess - 使用指向 index.php 的 2 个参数编写干净的 URL
- java - 找不到指定的文件?
- crate - Crate DB 2 节点设置