我正在编写一个包含以下内容的 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。
最佳答案
永远不要检查
type(x) == foo
,使用isinstance(x, foo)
— 例如,如果有子类,前者将中断.您似乎在维护平行列表。如果顺序很重要,那么使用元组列表可能更有意义,所以
self.values.append((name, description))
。如果顺序无关紧要,字典会更好:self.values[name] = description
(假设您不想要重复的名称)。单字母变量是禁忌。
如果要用字符串或列表调用
newO
,将其拆分为两个函数有什么缺点?也许(我可能是错的)您来自一种具有编译时多态性的语言,其中字符串和列表的调度方式不同。实际上,它们被视为不同的函数,因此在动态语言中,您可以像这样拆分它们:def add(self, name, description): ... def add_many(self, name_list, description): for name in name_list: self.add(name, description)
您可能事先不知道您拥有的是字符串还是列表,但我希望情况并非如此。
单个字符串的大小写与字符串列表的大小写真的不同吗?为什么不只使用单元素列表来删除条件?您也可以使用可变参数,使语法更安全:
def add_names(self, description, *name_list): for name in name_list: self.add(name, description)
关于python - 更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3569093/