2017-01-20 5 views
1

が、私は私の関数は私のクラスの属性として返すものを渡したい戻り値クラスが

>>> def something(): 
...  x = 5 
...  y = 6 
...  return x, y 

>>> class SomethingElse(): 
...  def __init__(self, x, y): 
...    self.x = x 
...    self.y = y 
...    print(x+y) 
... 

、私はこのような関数やクラスを持っていると言う属性として、これは行うことは可能でしょうか?私が私の機能を呼び出すとき、私はそれをただ1つの属性として得ます。私が実際に欲しい

>>> S = SomethingElse(5, 6) 
11 
>>> S1 = SomethingElse(something) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: __init__() missing 1 required positional argument: 'y' 

は、

>>> S1 = SomethingElse(something) 
11 

答えて

3

であるあなたは、これはで見ることができるので、

>>> SomethingElse(*something()) 
11 

のように、スプラット(または "開梱")演算子*を使用することができますPythonチュートリアルではUnpacking Argument Listsであり、通常は引数の展開と呼ばれます。

-1

あなたはいくつかの選択肢があります。

このは、オプションの引数になります(y)。SomethingElse(something())またはSomethingElse(5, 6)を使用して呼び出します。この

class SomethingElse(): 
    def __init__(self, x, y=None): 
     if y is None: 
      x, y = *x 
     self.x = x 
     self.y = y 
     print(x + y) 

は完全SomethingElseの新しいインスタンスを返すヘルパー関数make_kindを定義します。 SomethingElse.make_kind()を使用して呼び出すことができます。 selfのパノメーターが必要です。

class SomethingElse(): 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 
     print(x + y) 

    @staticmethod 
    def make_kind(): 
      x = 5 
      y = 6 
      return SomethingElse.__init__(x, y) 

@staticmethodについては、公式のPython 3.5ドキュメントをご覧ください。

+1

これは本当に質問にはあてはまらないと思います。 –

+0

@ juanpa.arrivillagaなぜですか?ちょうど "これは本当にすべての質問に対処しているとは思わない"というのは役に立たない。 –

+1

質問は、タプルをコンストラクタに渡す方法です。あなたの最初のオプションは本当に意味をなさないので、スプラット演算子の使用に置き換える必要があります。 2番目の選択肢は、設計についての前提を作ります。有効な解決策かもしれませんが、もう一度質問に答えていません。 –