Pythonで動的にクラスを切り替える方法

記事内に広告が含まれています。

Pythonで動的にクラスを切り替える方法です。

例えばシステムによって機能ごと動作を変更する際に使える方法です。

サンプル自体は簡単なので早速見ていきましょう。

Pythonで動的にクラスを切り替える方法

Pythonで動的にクラスを切り替えるには「type()」を利用します。

type(object)は、引数に渡したオブジェクトの型を返す関数で、オブジェクトの型を調べる時に使います。

このtype(object)の戻り値は「strやintなどのtype型(型オブジェクト)」なので、それをそのまま利用します。

typeでにクラスを切り替える

type(object)を利用してクラスを目的のものに入れ替えます。

入れ替えるタイミングは「__new__()」メソッドで行います。

import sys

class A():
    def display( self ) :
        print( "Class A():display()" )

class B(A):
    def display( self ) :
        print( "Class B():display()" )

class C(A):
    def display( self ) :
        print( "Class C():display()" )

class D():
    #ここで目的のクラスに自分自身を入れ替える
    def __new__( cls ):
        return super().__new__( type( C() ) )

d= D()
d.display()

上記の「type( C() )」で目的のクラスを戻り値として受け取って、そのクラスで自分自身を初期化します。

実行結果は

Class C():display()

になります。

当然

class D():
    #ここで目的のクラスに自分自身を入れ替える
    def __new__( cls ):
        return super().__new__( type( B() ) )

d= D()
d.display()

では

Class B():display()

になります。

まとめ

Pythonで動的にクラスを切り替えるには「type(object)」の戻り値で自分自身を初期化すると簡単にできました。

単純なクラスの切り替えならこれで十分ですね。

以上、Pythonで動的にクラスを切り替える方法でした。

タイトルとURLをコピーしました