2017-05-30 7 views
0

私はPython3の自己関数から自己属性を繰り返したいのですが、似たようなものは見つかりませんでした。私はクラスhereの外でそれを行う方法を見つけました。Python3でクラス内の自己属性を反復する方法は?

私の質問は可能ですか?

class Foo: 

    def __init__(self, attr1, attr2): 
     self.attr1 = attr1 
     self.attr2 = attr2 

    def method1(self): 
     #Return sum of the values of the self attributes 
     pass 
+0

あなたは 'attr1'、' attr2'を繰り返していますか? –

+0

うん、勇気とグスタボコメント以下の正解。 –

答えて

2

私は単純なもののために__dict__を使用することの大きなファンではありません。あなたのインスタンス属性のdictを返すにはvarsを使うべきです

>>> class Foo(object): 
...  def __init__(self, attr1, attr2): 
...   self.attr1 = attr1 
...   self.attr2 = attr2 
...  def method1(self): 
...   return sum(vars(self).values()) 
... 
>>> Foo(2, 4).method1() 
6 
+0

正しい良い。しかし、違いは何ですか?パフォーマンス、多分? –

+0

他の回答では、この[ディスカッション](https://stackoverflow.com/questions/21297203/use-dict-or-vars)にリンクしています。 –

4

あなたは__dict__部材を介してすべての属性にアクセスすることができます:

class Foo: 

    def __init__(self, attr1, attr2): 
     self.attr1 = attr1 
     self.attr2 = attr2 

    def method1(self): 
     return sum(self.__dict__.values()) 

をまたvars(これを指摘してAzat IbrakovとSMStyvaneのおかげで)使用することができます。

def method1(self): 
     return sum(vars(self).values()) 

Hereは、__dict__vars()の素晴らしいディスカッションです。

+2

あなたはそれを単純に 'sum(self .__ dict __。values())'にすることができます。 –

+1

あなたはそうです、それを修正します! – themiurge

+0

うん、それはうまく動作します。どうもありがとう。 –

関連する問題