2016-09-20 15 views
1

最近、私はpythonでoopを使い始めました。私は開始された属性の一般的なgetメソッドまたはsetメソッドを記述したいと思います。たとえば、いくつかの属性とそれに対応するgetメソッドを持つSongクラスがあります。私は複数のif文を避けたいと思います。 2つの属性を使用するだけで問題はありませんが、5つ以上の属性があると、コードを読みにくくなります。すべての可能なケースを定義することなく、のinitから値を取得するためにargsに文字列を使用できますか?クラスの一般的なgetメソッドを書くには?

class Song(object): 

    def __init__(self,title,prod): 
     self.title = title 
     self.prod = prod 

    def getParam(self,*args): 
     retPar = dict() 
     if 'title' in args: 
      print(self.title) 
      retPar['title'] = self.title 
     if 'prod' in args: 
      print(self.prod) 
      retPar['prod'] = self.prod 
     return(retPar) 

これが可能な場合は、何も見つかりませんでした。これどうやってするの?

+1

なぜこれをやりたいのか分かりません。なぜメソッドが必要なのですか? –

+0

'return {attr:getattr(self、attr)for attr for args}' ... ...? – deceze

+0

@Daniel Roseman:直接的にattritubesにアクセスする必要がないように、Python構文に精通していない同僚のための関数を提供すること。プロットなどのため。 – Paprika

答えて

0

は、アトリビュートに直接アクセスする必要がないように、Python構文に精通していない同僚のための機能を提供します。パイソンは必ずしも教えとドット構文は、MATLAB

における基本的な知識を持っている人のために混乱しているされていないため、

をプロットすると、そのようなもののために私は、これは簡単に教えることができるとあなたはいけないと主張するだろうそう単純なもののために後方に曲げて...しかし、これは本当にあなたが望むものであると仮定すると、これは非常に良いアイデアのようになります。

class Song(object): 
    def __init__(self, title, prod): 
     self.title = title 
     self.prod = prod 

    def __getitem__(self, key): 
     return getattr(self, key) 

song = Song('Foo', 'Bar') 
print song['title'] 

https://docs.python.org/2/reference/datamodel.html#object.__getitem__https://docs.python.org/2/library/functions.html#getattrを参照してください。

関連する問題