Pythonです。プロパティゲッターに複数の引数を渡すには?
2023-08-18 12:36:49
質問
次のような例を考えてみましょう。
class A:
@property
def x(self): return 5
で、当然ながら
a = A(); a.x
を呼び出すと
5
しかし、プロパティxを変更できるようにしたいと想像してください。
このように、例えば
class A:
@property
def x(self, neg = False): return 5 if not neg else -5
で呼び出し
a = A(); a.x(neg=True)
これはTypeErrorを発生させます。
'int' object is not callable
が発生しますが、これはごく普通のことで、私たちの
x
は次のように評価されます。
5
.
そこで、プロパティゲッターに複数の引数を渡すことが可能であれば、その方法を知りたいと思います。
どのように解決するのですか?
注意点として
があります。
を使用する必要があります。
property
をデコレータとして使用します。昔ながらの方法で、プロパティに加えて個々のメソッドを公開することも十分に可能です。
class A:
def get_x(self, neg=False):
return -5 if neg else 5
x = property(get_x)
>>> a = A()
>>> a.x
5
>>> a.get_x()
5
>>> a.get_x(True)
-5
これは、あなたがそれを使って何をしようとしているかに応じて、良いアイデアかもしれませんし、そうでないかもしれません(しかし、私がレビューしているコードでこのパターンに遭遇した場合、コメントで優れた正当性を見ることを期待します)。
関連
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] print関数の出力をフラッシュする(pythonの出力をバッファリング解除する)にはどうすればよいですか?
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] Pythonのsite-packagesディレクトリの場所を見つけるにはどうしたらいいですか?
-
[解決済み] Pythonの@propertyデコレーターはどのように機能するのでしょうか?
-
[解決済み] Pythonで文字列を別の文字列に追加するにはどうすればよいですか?
-
[解決済み] argparseでコマンドラインの引数としてリストを渡すにはどうしたらいいですか?
-
[解決済み] by lazy" と "lateinit" を使ったプロパティの初期化
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Django で全てのリクエストヘッダを取得するにはどうすれば良いですか?
最新
-
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の要素別タプル演算(sumなど
-
[解決済み] 小数点以下1桁を取得する[重複]。
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] PyMongoで.sortを使用する
-
[解決済み] tensorflowのCPUのみのインストールでダイナミックライブラリ 'cudart64_101.dll' を読み込めなかった
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] Pythonの文字列書式をリストで使う