2016-09-20 108 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

相关问题