[解決済み] インスタンスメンバのデフォルト引数値をメソッドに渡すには?
2023-06-17 21:11:13
質問
インスタンスの属性の値を使って、インスタンスメソッドにデフォルトの引数を渡したいのですが、どうすればいいですか?
class C:
def __init__(self, format):
self.format = format
def process(self, formatting=self.format):
print(formatting)
それを試すと、次のようなエラーメッセージが表示されます。
NameError: name 'self' is not defined
このようなメソッドの動作をさせたい。
C("abc").process() # prints "abc"
C("abc").process("xyz") # prints "xyz"
何が問題なのでしょうか、なぜこれが動作しないのでしょうか。また、どうすればこれを動作させることができるでしょうか?
どのように解決するのですか?
デフォルト値はメソッドの定義時に評価されるため、インスタンスが存在する前であるため、これをデフォルト値として実際に定義することはできません。通常のパターンでは、代わりに次のようなことを行います。
class C:
def __init__(self, format):
self.format = format
def process(self, formatting=None):
if formatting is None:
formatting = self.format
print(formatting)
self.format
が使用されるのは
formatting
は
None
.
デフォルト値がどのように機能するかのポイントを示すために、この例をご覧ください。
def mk_default():
print("mk_default has been called!")
def myfun(foo=mk_default()):
print("myfun has been called.")
print("about to test functions")
myfun("testing")
myfun("testing again")
そして、ここでの出力。
mk_default has been called!
about to test functions
myfun has been called.
myfun has been called.
注目すべきは
mk_default
が一度だけ呼び出され、それは関数が呼び出される前に起こったのです!
関連
最新
-
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でのAWS Lambdaのインポートモジュールエラー
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] Pythonのargparseを使った隠し引数の作成
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pythonでファイルの読み込みと上書きをする
-
[解決済み] virtualenvsはどこに作成するのですか?
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] データクラスとtyping.NamedTupleの主な使用例