Determine si una clase de Python es una clase base abstracta o concreto

Mi aplicación Python contiene muchas clases abstractas e implementaciones. Por ejemplo:

import abc
import datetime

class MessageDisplay(object):
    __metaclass__ = abc.ABCMeta

    @abc.abstractproperty
    def display(self, message):
        pass

class FriendlyMessageDisplay(MessageDisplay):
    def greet(self):
        hour = datetime.datetime.now().timetuple().tm_hour

        if hour < 7:
            raise Exception("Cannot greet while asleep.")
        elif hour < 12:
            self.display("Good morning!")
        elif hour < 18:
            self.display("Good afternoon!")
        elif hour < 20:
            self.display("Good evening!")
        else:
            self.display("Good night.")

class FriendlyMessagePrinter(FriendlyMessageDisplay):
    def display(self, message):
        print(message)

FriendlyMessagePrinter Es una clase concreta que podemos usar ...

FriendlyMessagePrinter().greet()
Good night.

...peroMessageDisplay yFriendlyMessageDisplay son clases abstractas y el intento de crear una instancia daría como resultado un error:

TypeError: Can't instantiate abstract class MessageDisplay with abstract methods say

¿Cómo puedo verificar si un objeto de clase dado es una clase abstracta (no insustituible)?

Respuestas a la pregunta(3)

Su respuesta a la pregunta