Pythonで、リターンタイプに基づいてリターン/ゲットをオーバーロードする方法は?

Cgt

Pythonでは、リターンタイプをオーバーロードすることは可能ですか?基本的に、私は次のようなことができるかどうかを確認しようとしています。

class Node(object):
   def __init__(self):
       self.value = 5

   def hello(self):
       print('hello')

class Container(object):
   def __init__(self):
       self.node = Node()

   def __setattr__(self, name, value):
       if self.__dict__.get(name, False) and name == 'node':
          obj = getattr(self, name)
          obj.value = value
       else:
          self.__dict__[name] = value

       # some method overloading... to return base on type

container = Container()
container.node = 3
print (container.node.value) # outputs 3
int_val = 0
int_val = container.node  # assign int_val to 3
container.node.hello() # prints out 'hello'
ブレンバーン

それは可能ではありません。クラスのインスタンスでが呼び出された__int__ときに何が起こるかを指定するメソッドを定義できるため、3になります。ただし、の一部が別のものである場合、実際3することはできません。の属性参照の評価は左から右に行われるため、後でメソッドを呼び出そうとすることを「知らずに」評価されます。intint(container.node)container.nodecontainer.nodecontainer.node.hello()container.node.hello()container.node

Patrick Haughが彼の答えで示唆しているように、サブクラス化intすることcontainer.nodeできます。これは、3番のように動作するだけでなく、.hello()メソッドもあります。しかし、それでもcontainer.node、異なるコンテキストで異なる値を持たせることはありません2つのコンテキストで必要な機能を組み合わせた1つの値を持つようにします。値は実際に3はノードインスタンスではなく、状況によっては問題になる可能性があります。それでも、これは多くの場合、あなたが望んでいるように見えるものと同様の効果を達成するための正当な方法である可能性があります。

値を3以外の値(たとえば、ラッパーオブジェクト)に設定する__setattr__ように使用することもできcontainer.node = 3ますが、上記は変更されません。評価する場合container.node、すべてのコンテキストで1つの値しか持つことができません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ADプロパティに基づいてリボン内のOfficeアドインをターゲットにすることは可能ですか?

分類Dev

XSLのリンクタイプに基づいてターゲットを変更する方法

分類Dev

ドロップダウンリストに基づいてテーブルにデータを入力するにはどうすればよいですか?

分類Dev

ドロップダウンリストからの選択に基づいてページ上のデータをフィルタリングする方法

分類Dev

ユーザーがドロップダウンメニューから選択したパラメーターに基づいてJavaオブジェクトのリストをソートするにはどうすればよいですか?

分類Dev

ユーザーがドロップダウンメニューから選択したパラメーターに基づいてJavaオブジェクトのリストをソートするにはどうすればよいですか?

分類Dev

Laravelで未定義の親IDリターンに基づいてajaxドロップダウンを取得する

分類Dev

ドロップダウン入力に基づいてJSONデータをロードする方法は?

分類Dev

ドロップダウンリストからの選択オプションに基づいてmysqlデータベースを選択する

分類Dev

HttpStatusコードに基づいて再試行テンプレートで使用されるバックオフポリシーをカスタマイズすることは可能ですか

分類Dev

ブラザーのオールインワンプリンター/スキャナー/ファックス用のプロプライエタリドライバーをインストールするにはどうすればよいですか?

分類Dev

* ngIf条件に基づいてロードされたテンプレート内の要素をターゲットにする方法

分類Dev

別のObservableに基づいてRXJSスキャンオペレーターをリセットする方法

分類Dev

別のシートのリストに基づいて行をフィルタリングする方法は?(Googleスプレッドシート)

分類Dev

他のシートに基づいてデータ検証ドロップダウンを埋める方法は?

分類Dev

C ++:テンプレートを使用してリターンタイプをオーバーロードする方法は?

分類Dev

Python-インデックスに基づいてリストのいくつかの要素をタプルにマージする方法は?

分類Dev

マルチインデックスパンダデータフレームに基づいてmatplotlibでエラーバーをプロットする

分類Dev

ナビゲーションバーでオートコンプリートを使用してドロップダウンをインポートする方法

分類Dev

Laravel:ユーザー選択ドロップダウンに基づいてクエリビルダーをフィルタリングする方法

分類Dev

ドロップダウンリストの選択に基づいて、データがグリッドビューにバインドされない

分類Dev

オーダーメイドの時間のリストに基づいてパンダのタイムインデックスデータをサブセット化するにはどうすればよいですか?

分類Dev

SQLクエリに基づいてラジオボタンでグリッドビューをフィルタリングする方法

分類Dev

ブートストラップ4:タイトル(.card-title)とタグ(.badge)に基づいてカードをフィルタリングする

分類Dev

キー列に基づいてGoogleスプレッドシートのタブをリンクする

分類Dev

埋め込まれたターゲットをデバッグするときに使用されている間違ったPythonインタープリター

分類Dev

ドロップダウンリストの選択に基づいてデータベースからデータを取得する

分類Dev

セル値に基づいてwpfデータバインドグリッドセルを変更するにはどうすればよいですか?

分類Dev

基準に基づいてローリングタリーを生成する

Related 関連記事

  1. 1

    ADプロパティに基づいてリボン内のOfficeアドインをターゲットにすることは可能ですか?

  2. 2

    XSLのリンクタイプに基づいてターゲットを変更する方法

  3. 3

    ドロップダウンリストに基づいてテーブルにデータを入力するにはどうすればよいですか?

  4. 4

    ドロップダウンリストからの選択に基づいてページ上のデータをフィルタリングする方法

  5. 5

    ユーザーがドロップダウンメニューから選択したパラメーターに基づいてJavaオブジェクトのリストをソートするにはどうすればよいですか?

  6. 6

    ユーザーがドロップダウンメニューから選択したパラメーターに基づいてJavaオブジェクトのリストをソートするにはどうすればよいですか?

  7. 7

    Laravelで未定義の親IDリターンに基づいてajaxドロップダウンを取得する

  8. 8

    ドロップダウン入力に基づいてJSONデータをロードする方法は?

  9. 9

    ドロップダウンリストからの選択オプションに基づいてmysqlデータベースを選択する

  10. 10

    HttpStatusコードに基づいて再試行テンプレートで使用されるバックオフポリシーをカスタマイズすることは可能ですか

  11. 11

    ブラザーのオールインワンプリンター/スキャナー/ファックス用のプロプライエタリドライバーをインストールするにはどうすればよいですか?

  12. 12

    * ngIf条件に基づいてロードされたテンプレート内の要素をターゲットにする方法

  13. 13

    別のObservableに基づいてRXJSスキャンオペレーターをリセットする方法

  14. 14

    別のシートのリストに基づいて行をフィルタリングする方法は?(Googleスプレッドシート)

  15. 15

    他のシートに基づいてデータ検証ドロップダウンを埋める方法は?

  16. 16

    C ++:テンプレートを使用してリターンタイプをオーバーロードする方法は?

  17. 17

    Python-インデックスに基づいてリストのいくつかの要素をタプルにマージする方法は?

  18. 18

    マルチインデックスパンダデータフレームに基づいてmatplotlibでエラーバーをプロットする

  19. 19

    ナビゲーションバーでオートコンプリートを使用してドロップダウンをインポートする方法

  20. 20

    Laravel:ユーザー選択ドロップダウンに基づいてクエリビルダーをフィルタリングする方法

  21. 21

    ドロップダウンリストの選択に基づいて、データがグリッドビューにバインドされない

  22. 22

    オーダーメイドの時間のリストに基づいてパンダのタイムインデックスデータをサブセット化するにはどうすればよいですか?

  23. 23

    SQLクエリに基づいてラジオボタンでグリッドビューをフィルタリングする方法

  24. 24

    ブートストラップ4:タイトル(.card-title)とタグ(.badge)に基づいてカードをフィルタリングする

  25. 25

    キー列に基づいてGoogleスプレッドシートのタブをリンクする

  26. 26

    埋め込まれたターゲットをデバッグするときに使用されている間違ったPythonインタープリター

  27. 27

    ドロップダウンリストの選択に基づいてデータベースからデータを取得する

  28. 28

    セル値に基づいてwpfデータバインドグリッドセルを変更するにはどうすればよいですか?

  29. 29

    基準に基づいてローリングタリーを生成する

ホットタグ

アーカイブ