[解決済み] Pythonの組み込み型にカスタムメソッドや属性を追加することはできますか?
2023-03-10 06:06:52
質問
例えば
helloWorld()
メソッドをPythonのdict型に追加したいとします。これは可能でしょうか?
JavaScriptにはこのように動作するプロトタイプオブジェクトがあります。多分それは悪いデザインで、私はdictオブジェクトをサブクラス化すべきですが、その場合、それはサブクラス上でのみ動作し、私はそれが将来のすべての辞書上で動作するようにしたいのです。
JavaScriptではこうなります。
String.prototype.hello = function() {
alert("Hello, " + this + "!");
}
"Jed".hello() //alerts "Hello, Jed!"
もっと多くの例がある便利なリンクがあります。 http://www.javascriptkit.com/javatutors/proto3.shtml
どのように解決するのですか?
元の型に直接メソッドを追加することはできません。しかし、型をサブクラス化し、組み込み/グローバル名前空間でそれを置き換えることができ、望む効果のほとんどを達成できます。残念ながら、リテラル構文によって作成されたオブジェクトは、引き続きバニラ型であり、新しいメソッド/属性はありません。
以下はその様子です。
# Built-in namespace
import __builtin__
# Extended subclass
class mystr(str):
def first_last(self):
if self:
return self[0] + self[-1]
else:
return ''
# Substitute the original str with the subclass on the built-in namespace
__builtin__.str = mystr
print str(1234).first_last()
print str(0).first_last()
print str('').first_last()
print '0'.first_last()
output = """
14
00
Traceback (most recent call last):
File "strp.py", line 16, in <module>
print '0'.first_last()
AttributeError: 'str' object has no attribute 'first_last'
"""
関連
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pythonの静的メソッド?
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] Pythonスクリプトのプロファイリングはどのように行うのですか?
-
[解決済み] 誰かPythonで__all__を説明してくれませんか?
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Python 3でバイナリデータを標準出力に書き込むには?
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
最新
-
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のマルチプロセッシングプールimap_unorderedの呼び出しの進捗を表示しますか?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] 文字列から先頭と末尾のスペースを削除するには?
-
[解決済み] Pythonで0xを使わずにhex()を使うには?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?