@classmethod
def from_binary_descriptor(cls, data):
    """
        Attempts to create a USBDescriptor subclass from the given raw
        descriptor data.
        """
    for subclass in cls.__subclasses__():
        if subclass.handles_binary_descriptor(data):
            return subclass.from_binary_descriptor(data)
    return None
