Określ, czy klasa Pythona jest abstrakcyjną klasą bazową czy betonem

Moja aplikacja Python zawiera wiele abstrakcyjnych klas i implementacji. Na przykład:

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 to konkretna klasa, której możemy użyć ...

FriendlyMessagePrinter().greet()
Good night.

...aleMessageDisplay iFriendlyMessageDisplay są klasami abstrakcyjnymi, a próba utworzenia instancji spowodowałaby błąd:

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

Jak mogę sprawdzić, czy dany obiekt klasy jest klasą abstrakcyjną (niezainstalowaną)?

questionAnswers(3)

yourAnswerToTheQuestion