クラス定義の外でメソッドを定義する?
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#とは違うので、どのクラスにも属さない関数を持つことができます。もし関数をグループ化したければ、同じモジュールにまとめればいいし、パッケージの中にモジュールを入れ子にすることもできます。クラスを使うのは、関数をまとめるためだけでなく、新しいデータ型を作成する必要がある場合だけです。
関連
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] インスタンスのクラス名を取得する?
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] Pythonにはクラス内に「プライベート」変数がある?
-
[解決済み】ES6クラス変数の代替品
-
[解決済み] PySparkでデータフレームのカラムをString型からDouble型に変更する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] Pythonの要素別タプル演算(sumなど
-
[解決済み] SQLAlchemy: 日付フィールドをフィルタリングする方法は?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] あるオブジェクトが数であるかどうかを確認する、最もパイソン的な方法は何でしょうか?
-
[解決済み] 異なる順序で同じ要素を持つ2つのJSONオブジェクトを等しく比較するには?
-
[解決済み] if 節の終了方法
-
[解決済み] Python 言語を決定するには?
-
[解決済み] Pythonの文字列書式をリストで使う
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する