前提・実現したいこと
題名の通りです。
wxPythonのMenuItemを継承し、抽象メソッドを実装したクラスを定義したいです。
しかし、定義しようとすると以下のTypeErrorが発生してしまいます。
発生している問題・エラーメッセージ
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
該当のソースコード
Python
1from abc import ABCMeta, abstractmethod 2 3from wx import App, Frame, Menu, MenuBar, MenuItem 4 5 6# class SuperMenuItem(MenuItem): 7class SuperMenuItem(MenuItem, metaclass=ABCMeta): 8 @abstractmethod 9 def some_super_function(self): 10 raise NotImplementedError() 11 12 13if __name__ == "__main__": 14 app = App() 15 frame = Frame(None) 16 menubar = MenuBar() 17 menu = Menu() 18 menu_item = SuperMenuItem(text='hoge', id=0) 19 menu.Append(menu_item) 20 menubar.Append(menu, 'Hoge') 21 frame.SetMenuBar(menubar) 22 frame.Show() 23 app.MainLoop()
試したこと
MenuItemクラスがすでに抽象クラスなのではないかとおもい、metaclassにABCMetaを渡さずに実行してみました。
すると、NotImplementedError()が発生したので、抽象クラスとして機能していないと判断しました。
補足情報(FW/ツールのバージョンなど)
Python 3.8.2
wxPython 4.1.0
あなたの回答
tips
プレビュー