Python 3 で OOP を練習するための簡単なチェス プログラムを作成していますが、(クラス作成前に) クラス定義の基本クラスを動的に変更する方法を知りたいと思っていました。私のクラス構造はこれです。
- 抽象ピースクラス -> さまざまな派生ピース
- Board クラスには、派生ピース、8x8 マトリックス、およびいくつかのメソッドの複合体があります。
- 抽象インターフェイス クラス -> CLI または
- 抽象インターフェイス クラス -> GUI (Tkinter もサブクラス化)
- ゲーム クラス (ゲーム ロジックとメイン ループを処理するため)。現在、Board クラス メンバーがあります。
私は当初、 init中に定義されたインターフェイス データ メンバーを持つように Game クラスを実装しましたが、他の多くの内部ゲーム データをインターフェイス コンポジット メンバーに送信していることに気付きました。Game クラスをいずれかの Interface サブクラスのサブクラスにして、それらのメソッドに直接アクセスできるようにする (そしてそれらを抽象化する) 方がより洗練されていると思います。
ただし、これを動的に実行できるバージョンの Game クラスが必要です。これにより、コードを 2 回コーディングしたり、両方から継承したり、実行時にどの基本クラスを使用するかを決定したりする必要がなくなります。私は現在、 Game クラスを関数内にネストすることでこれを行っています。
def Game(ui):
class Game(ui):
...
return Game()
くだらないネーミングは、私がこのソリューションを気に入らない理由の一部です。通常とは違うことをしていることを明示的に使用したり確認したりせずに、Game クラスを単独で呼び出せるようにしたいと考えています。
メタクラスまたはクラス デコレータでこれを行う方法はありますか? 親クラスではなく、クラス属性に影響を与えることしかできませんでした。