2010-08-25 75 views
1

我写一个Python函数有以下几点:更好的方法来做到这一点?

class myObj(object): 
    def __init__(self, args): 
     # there is code here 
    def newO(self, name, description): 
     if type(name)==str: 
      self.oname.append(name) 
      self.o.append(description) 
     elif type(name)==list: 
      for n in name: 
       self.oname.append(n) 
       self.o.append(description) 

但是导致我相信这是不是为了实现这一目标的最佳途径。最好的方法是什么? 我希望能够用字符串或列表调用newO。

+0

什么的self.o和self.oname类型? – shahjapan 2010-08-25 18:47:56

回答

4
  1. 从不检查type(x) == foo,使用isinstance(x, foo) - 如果有一个子类,例如前将打破。

  2. 您似乎在维护并行列表。如果顺序很重要,那么使用元组列表可能更有意义,所以self.values.append((name, description))。如果顺序无关紧要,字典会更好:self.values[name] = description(假设您不想重复名称)。

  3. 单字母变量是否定的。

  4. 如果你想用一个字符串或者一个列表来调用newO,将它分成两个函数有什么缺点?也许(我可能是错的)你来自一种带编译时多态的语言,其中一个字符串和一个列表将以不同的方式分派。在现实中,他们将被视为不同的功能,所以在动态语言,你可能他们分手是这样的:

    def add(self, name, description): 
        ... 
    def add_many(self, name_list, description): 
        for name in name_list: 
         self.add(name, description) 
    

    这有可能是你不知道的先验你是否有一个字符串或列表,但我希望情况并非如此。

  5. 单字符串的情况是否与字符串列表的情况完全不同?为什么不只是使用一个元素列表来删除条件?你可以使用可变参数,以及,使语法更防弹:

    def add_names(self, description, *name_list): 
        for name in name_list: 
         self.add(name, description) 
    
+0

谢谢。我会尝试字典的东西来修复平行列表(我不喜欢)。我可能会最终使用单个元素列表而不是字符串。 我其实是在学习Python作为我的第一个完整的语言。 – Violet 2010-08-25 18:51:48

相关问题