2017-07-31 6 views
1

私は生計のためにコンパイラを維持するのに使用されましたが、これは私を混乱させます。メソッドと結合されたインスタンス化の動作が不明確

クラスを作成してメソッドを与えると、インスタンスをインスタンス化して、同時に簡単なメソッドを実行できるはずです。ここでは、彼らは同じことを行うなく行う必要がありますように見える2つの方法があります。

class foo(object) : 

    def __init__(self, val) : 
     self.val = val 

    def set_new(self, new) : 
     self.val = new 


a = foo(2).set_new(3) 

print a 

>>> None 

a = foo(2) 
s.set_new(3) 

>>> ..instance at ox7fe2... 

が、私はそれを設計していた、それはオブジェクトを作成し、コンストラクタを使用する主な行動だとして、コールa = foo(2).set_new(3)が持っているでしょうが。 .set_new()は補助的な作業です。

メソッドが 'self'を返す場合はすべて正常であるように見えますが、それはスタンドアロン(成功コードなど)と呼ばれるときにメソッドが独自の有用な結果を返すことができないことを意味します。 。

おそらく、set_new()の内部では、それが 'ネスト'または '連鎖'コールであることを知るいくつかの方法がありますが、それでもコールバックからの戻り値は矛盾します。

+0

戻り値は 'a'に割り当てられるべきもの... ...?あなたは 'a =(foo(2).set_new(3))'または '(a = foo(2)).set_new(3)'と解釈します。後者を期待しているようですが、私はそのような連鎖方法を解釈する言葉がないことを知っています。 – deceze

+0

私が嫌いな理由の1つに '。' OO言語でメソッドを呼び出す方法。 – eSurfsnake

答えて

0

これはかなり簡単です。最初の呼び出しで2つのことが起こっています。 foo(2)はインスタンスを作成し、次に.set_new(3)は値を3に設定します。最後のアクションの出力はaに割り当てられているため、.set_new()は何も返しません(Noneの値)ので、aNoneになります。ちょうどselfset_new()に返すと、チェーンされたコールは正常に動作します。

関連する問題