我有一个像这样的功能
def print_stuff(items):
if isinstance(items, (str, bytes)):
items = (items,)
for item in items:
print (item)
可以按如下方式调用:
In [37]: print_stuff(('a', 'b'))
a
b
In [38]: print_stuff('a')
a
我不喜欢isinstance (items, (str, bytes))
我更愿意做isinstance(item, (collections.abc.MAGIC))
其中MAGIC是所有序列对象的ABC,可以包含其他序列对象,例如
但不是:
我担心这是不可能的,因为tuple
和str
具有相同的7个ABC :(
In [49]: [v for k, v in vars(collections.abc).items()
...: if inspect.isclass(v) and issubclass(tuple, v) ]
Out[49]:
[collections.abc.Hashable,
collections.abc.Iterable,
collections.abc.Reversible,
collections.abc.Sized,
collections.abc.Container,
collections.abc.Collection,
collections.abc.Sequence]
In [50]: [v for k, v in vars(collections.abc).items()
...: if inspect.isclass(v) and issubclass(list, v) ]
Out[50]:
[collections.abc.Iterable,
collections.abc.Reversible,
collections.abc.Sized,
collections.abc.Container,
collections.abc.Collection,
collections.abc.Sequence,
collections.abc.MutableSequence]
In [51]: [v for k, v in vars(collections.abc).items()
...: if inspect.isclass(v) and issubclass(str, v) ]
Out[51]:
[collections.abc.Hashable,
collections.abc.Iterable,
collections.abc.Reversible,
collections.abc.Sized,
collections.abc.Container,
collections.abc.Collection,
collections.abc.Sequence]
答案 0 :(得分:2)
好问题。
isinstance(x, str)
。bytes
ABC区分bytearray
和collections.abc.ByteString
等字节序列类型。当然,您也可以定义自己的ABC,其中包括str
和ByteString
,甚至可以给它__subclasshook__
检查capitalize
等方法的类}。
答案 1 :(得分:0)
您的魔法称为$(trigger_obj).on('loading_complete', function () {
\\ logic ...
});
。它不是抽象基类,但它是我们最好的基础类。
来自https://docs.python.org/2/library/types.html#types.StringTypes(强调我的):
包含
types.StringTypes
和StringType
的序列用于促进 更容易检查任何字符串对象。使用它更便携 而不是使用其他地方构建的两种字符串类型的序列 因为它只包含UnicodeType
,如果它已在运行中构建 Python版本。例如:UnicodeType
。2.2版中的新功能。