Simple Class and an Abstract Class:

Detailed comparison table between a Simple Class and an Abstract Class:

Feature

Simple Class

Abstract Class

Can it have logic?

✅ Yes, it can have logic (methods with functionality).

✅ Yes, it can have logic (concrete methods with functionality).

Can it have properties?

✅ Yes, it can have properties (e.g., instance variables).

✅ Yes, it can have properties (e.g., instance variables).

Can it have rules only (abstract methods)?

❌ No, it cannot enforce rules or abstract methods.

✅ Yes, it can have abstract methods, which must be implemented by the subclass.

Can it create an object directly?

✅ Yes, you can create an object of a simple class directly.

❌ No, you cannot create an object of an abstract class directly. It must be subclassed first, and abstract methods must be implemented in the subclass.

Purpose

Share logic (code), but no enforcement of rules on subclasses.

Share logic (code) and enforce rules on subclasses (e.g., forcing certain methods to be implemented like withdraw()).

Can it be subclassed?

✅ Yes, a simple class can be subclassed.

✅ Yes, abstract classes are typically meant to be subclassed to provide specific implementations for abstract methods.

Enforces method implementation?

❌ No, subclasses are not forced to implement any methods.

✅ Yes, subclasses must implement all abstract methods, otherwise, a TypeError will occur.

Instantiating the class

✅ You can instantiate the class directly.

❌ You cannot instantiate the class directly. It must be subclassed, and all abstract methods must be implemented before creating an object.

Can it contain abstract methods?

❌ No, it cannot have abstract methods.

✅ Yes, it can have abstract methods that only define a signature (no logic), forcing subclasses to provide an implementation.

Can it be used as a blueprint?

❌ It can serve as a base class, but it doesn't enforce any structure.

✅ It serves as a blueprint for subclasses, enforcing a certain structure and method signatures.

FAQ’s

Can I create an abstract method in a simple class?

No, you cannot create an abstract method in a simple class (normal class) in Python directly.

If you try this:

class MyClass:
    @abstractmethod
    def hello(self):
        pass

❌ It will give an error:

Because @abstractmethod only works if the class inherits from ABC (Abstract Base Class).

Correct Way:

from abc import ABC, abstractmethod

class MyClass(ABC):  # must inherit ABC
    @abstractmethod
    def hello(self):
        pass

So,

  • @abstractmethod → Only works inside an abstract class.

  • Abstract class = must inherit ABC.

Updated on