[解決済み】__get__と__set__とPythonディスクリプタの理解
2022-03-25 09:05:18
質問
私は 試行錯誤 Pythonの記述子とは何か、そしてそれが何のために有用なのかを理解するために。どのように機能するかは理解していますが、ここで疑問があります。次のコードを考えてみましょう。
class Celsius(object):
def __init__(self, value=0.0):
self.value = float(value)
def __get__(self, instance, owner):
return self.value
def __set__(self, instance, value):
self.value = float(value)
class Temperature(object):
celsius = Celsius()
-
なぜ記述子クラスが必要なのですか?
-
とは何ですか?
instance
とowner
ここで?は__get__
). これらのパラメーターの目的は何ですか? -
この例をどのように呼び出す/使用するのでしょうか?
どのように解決するのですか?
記述子は、どのようにPythonの
property
型が実装されています。ディスクリプタは、単純に
__get__
,
__set__
などを定義して、別のクラスに追加します (上記の Temperature クラスの場合と同様です)。例えば
temp=Temperature()
temp.celsius #calls celsius.__get__
ディスクリプターを割り当てたプロパティにアクセスする (
celsius
は、適切なディスクリプタ・メソッドを呼び出します。
instance
で
__get__
は、そのクラスのインスタンスです(だから、上記。
__get__
を受け取ることになります。
temp
一方
owner
は記述子を持つクラス(だから
Temperature
).
記述子クラスを使用して、その動力源となるロジックをカプセル化する必要があります。そうすれば、記述子が何らかの高価な操作のキャッシュに使用される場合(たとえば)、そのクラスではなく自分自身に値を格納することができます。
ディスクリプタに関する記事はこちら こちら .
EDIT: jchlさんがコメントで指摘されているように、単純に
Temperature.celsius
,
instance
になります。
None
.
関連
最新
-
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はWordの読み書きの変更操作を実装している
-
PythonでECDSAを実装する方法 知っていますか?
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み】既存のオブジェクトインスタンスにメソッドを追加する