2016-09-20 73 views
1

最近我開始在python中使用oop。我想爲啓動的屬性編寫一個通用的get或set方法。例如,有一個具有多個屬性的類Song和一個相應的get方法。我想避免多個if語句。只有兩個屬性並不重要,但如果有> 5個屬性,代碼將難以閱讀。在沒有定義所有可能的情況下,是否可以在參數中使用字符串來獲取初始值的值?如何爲一個類編寫一般的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

'返回{attr:getattr(self,attr)attr in args}'...? – deceze

+0

@Daniel Roseman:爲不熟悉python語法的同事提供一個函數,使他們不必直接訪問attritubes。爲繪圖和這樣的事情。 – Paprika

回答

0

爲不熟悉python語法的同事提供了一個函數,使他們不必直接訪問attritubes。對於策劃這樣的事情

因爲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

相關問題