不幸的是,没有任何方法可以自动执行此操作。您提出的解决方案(
str不可迭代的子类)遭受与
isinstance()…相同的问题,即,您必须记住在使用字符串的任何地方都使用它,因为无法使Python代替它来使用它。本机类。当然,您不能用猴子修补内置对象。
我可能建议,如果您发现自己编写的函数使用可迭代的容器 或 字符串,则可能是您的设计有问题。但是有时您无法避免。
在我看来,最不麻烦的事情是将检查放入函数中,并在进入循环时调用该函数。至少这会将行为更改放在您最有可能看到的位置:在
for语句中,不要埋藏在班级的某个地方。
def iterate_no_strings(item): if issubclass(item, str): # issubclass(item, basestring) for Py 2.x return iter([item]) else: return iter(item)for thing in iterate_no_strings(things): # do something...



