M J
M J

Reputation: 4317

Python reference for hasattr() choices to identify types

Is there a good one-stop-shop Python reference for choosing attributes to use with hasattr() to identify types.

For example, the following is for a sequence which is not a string:

def is_sequence(arg):
    return (not hasattr(arg, "strip") and
            hasattr(arg, "__getitem__") or
            hasattr(arg, "__iter__")) 

It would be nice to have a solid reference for choosing the best patterns quickly.

Upvotes: 1

Views: 593

Answers (2)

nneonneo
nneonneo

Reputation: 179392

Use the appropriate abstract base class:

import collections
isinstance([], collections.Sequence) # ==> true

Upvotes: 1

ecatmur
ecatmur

Reputation: 157324

Use the virtual subclasses that have already been written for you in the collections module (collections.abc in Python 3.3).

To check if something is a non-string sequence, use

from collections import Sequence    # collections.abc in Python 3.3
isinstance(arg, Sequence) and not isinstance(arg, basestring)    # str in Python 3

Upvotes: 5

Related Questions