1. ホーム
  2. python

クラス定義の外でメソッドを定義する?

2023-09-06 12:41:48

質問

class MyClass:
    def myFunc(self):
        pass

このような場合 MyFunc() をクラス定義の外、もしかしたら別のモジュールで作ることはできますか?

どのように解決するのですか?

クラスの外部で関数を定義し、それをメソッドとしてクラス本体で使用することができます。

def func(self):
    print("func")

class MyClass:
    myMethod = func

また、クラスが定義された後に、そのクラスに関数を追加することができます。

class MyClass:
    pass

def func(self):
    print("func")

MyClass.myMethod = func

関数とクラスを別々のモジュールで定義することもできますが、あるモジュールでクラスを定義し、別のモジュールでそれをインポートして、(私の2番目の例のように)動的にメソッドを追加することはお勧めしません。

これはPythonでは可能ですが、少し特殊であることを指摘します。あなたはコメントで、"ユーザーはさらに"メソッドを追加することが許可されていると述べています。それは奇妙に聞こえます。もしあなたがライブラリを書いているのなら、おそらくライブラリのユーザがライブラリのクラスに動的にメソッドを追加することを望まないでしょう。ライブラリのユーザは、あなたのクラスを直接変更するよりも、あなたのクラスを継承した独自のサブクラスを作成する方がより普通でしょう。

また、関数がクラスの中にある必要は全くないことを付け加えておきます。PythonはJavaやC#とは違うので、どのクラスにも属さない関数を持つことができます。もし関数をグループ化したければ、同じモジュールにまとめればいいし、パッケージの中にモジュールを入れ子にすることもできます。クラスを使うのは、関数をまとめるためだけでなく、新しいデータ型を作成する必要がある場合だけです。