小编use*_*126的帖子

如何在没有元类冲突的情况下对PyQt子类使用泛型类型?

我曾尝试abc.ABCMeta使用sip包装器类型,并且在子类使用时效果很好abc.ABC.

class QABCMeta(wrappertype, ABCMeta):
    pass

class WidgetBase(QWidget, metaclass=QABCMeta):
    ...

class InterfaceWidget(WidgetBase, ABC):
    ...

class MainWidget(InterfaceWidget):
    ...
Run Code Online (Sandbox Code Playgroud)

但它不起作用typing.Generic.

class QGenericMeta(wrappertype, GenericMeta):
    pass

class WidgetBase(QWidget, Generic[T], metaclass=QGenericMeta):
    ...

class GenericWidget(WidgetBase[float]):
    ...
Run Code Online (Sandbox Code Playgroud)

它提出:

line 980, in __new__
    self if not origin else origin._gorg)
TypeError: can't apply this __setattr__ to sip.wrappertype object
Run Code Online (Sandbox Code Playgroud)

我希望它像往常一样使用泛型子类:

class TableBase(QTableWidget, Generic[T]):
    @abstractmethod
    def raw_item(self, row: int) -> T:
        ...
    def data(self) -> Iterator[T]:
        yield from (self.raw_item(row) for row in range(self.rowCount()))

class MainTable(TableBase[float]):
    def …
Run Code Online (Sandbox Code Playgroud)

python metaclass typing pyqt5 pyside2

7
推荐指数
1
解决办法
192
查看次数

标签 统计

metaclass ×1

pyqt5 ×1

pyside2 ×1

python ×1

typing ×1