我试图创建一个只接受iterable参数的方法,比如list
、tuple
、set
或{
我的代码是:
class MjmMenuControl(MjmBaseMenu):
def __init__(self, items=None):
iterables = (dict, list, set, tuple)
for iterable in iterables:
if isinstance(items, iterable):
...
break
然而,我想知道是否有更简单的方法,比如if isinstance(items, <iterable_base_class>):
,但是我什么都找不到。在
我已经尝试为list
等查找基类,但它们似乎都是从object
派生的:
这是可能的还是我必须坚持可怕的for
循环?在
是,使用^{} :
但是,我只需要让方法假设传递了一个iterable,调用者负责确保传入正确的类型。在
在python3.3中,^{} module 是新的;它的内容以前放在^{} module 中,尽管名称在python3.3及更高版本中仍然可用。在
collections.abc.Iterable
选项的一个弱点是它不能处理像这样的自定义iterable类。。。在经常有人说,Pythonic的方法是使用duck typing,即尝试将对象视为iterable,并在异常失败时处理异常。例如。。。在
^{pr2}$…但是,这两种方法都有一个弱点,即将字符串视为与列表相同的东西,这通常不是您想要的。通常您希望测试iterable容器,这是略有不同的,因此通常会看到代码将字符串视为这种特殊情况。。。在
…虽然有点乱,但能完成任务。在
相关问题 更多 >
编程相关推荐