2017-05-10 4 views
0

私は、インスタンス自体が特定の値、属性、またはメソッドの戻り値を返すように、クラスのインスタンスを「呼び出す」方法を知りました。
私は例とそれが明確にしてみてください。インスタンスに直接アクセスしてクラスの属性を取得する

import numpy as np 

class MyClass(): 
    def __init__(self, x): 
     self.x = x 
     self.y = self.x*2 
     self.z = self.x*3 


    def __call_instance__(self): 
     return np.eye(2)*self.x 


def some_function(x, y, z): 
    return x, y, z 


inst = MyClass(3) 

some_function(x=inst, y=inst.y, z=inst.z) 

Out[1]: 
(array([[ 3., 0.], 
     [ 0., 3.]]), 6, 9) 

私は方法として__call__()を定義し、inst()でインスタンスを呼び出すことができることを知っています。しかし、特定のメソッドや特定の属性の戻り値を使用する方法はありますか?言い換えれば、インスタンス自体が自身の属性/プロパティのように動作するように? 私が探しているものを明確にすることができれば幸いです:-)

私はあなたの答えを楽しみにしています。 よろしくお願いします。ありがとうございます。

マルクス

+0

いや、そして何を提案しているのは、これまで言語に追加される可能性はほとんどありません。 – user2357112

+0

** ...単にカッコを付けずにインスタンスを呼び出すだけです**。それは意味をなさない。カッコを追加すると、*は*となります。 – wim

+0

はい、わかります。私はちょうどそれを表現する他の方法を知りませんでした:-) – Markus

答えて

0

しかし、単に括弧なしでインスタンスを「呼び出す」ことによって、特定のメソッドの戻り値、または特定の属性を使用する方法はありますか?

インスタンス名を入力するだけで、インスタンスを要求するだけです(より正確には、インスタンスにバインドされている変数の値を要求しています)。オーバーライド演算子の呼び出し、オーバーライドの印刷を__str__、呼び出しを__call__で呼び出すことができるさまざまなメソッドがあります。

しかし、インスタンスのメソッドの名前をオーバーライドすると、そのインスタンスにどのようにアクセスすると思いますか?


>>> l = [1, 2, 3] 
>>> l = l.pop 
# How can you access the original list? 
+0

すみませんが、ありがとうございました。さて、私はポイントを得ると思います。だから、私は__add__のようないくつかの演算子をオーバーライドする必要があると思います – Markus

関連する問題