Определите, является ли класс Python абстрактным базовым классом или конкретным

Мое приложение Python содержит много абстрактных классов и реализаций. Например:

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 это конкретный класс, который мы можем использовать ...

FriendlyMessagePrinter().greet()
Good night.

...ноMessageDisplay а такжеFriendlyMessageDisplay являются абстрактными классами, и попытка создать экземпляр привела бы к ошибке:

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

Как я могу проверить, является ли данный объект класса (необъяснимым) абстрактным классом?

Ответы на вопрос(3)

Ваш ответ на вопрос