You can also solve this problem using a metaclass:
- When a class is created (
__init__ method of metaclass), add a new instance registry 
- When a new instance of this class is created (
__call__ method of metaclass), add it to the instance registry.  
The advantage of this approach is that each class has a registry - even if no instance exists. In contrast, when overriding __new__ (as in Blckknght's answer), the registry is added when the first instance is created.
class MetaInstanceRegistry(type):
    """Metaclass providing an instance registry"""
    def __init__(cls, name, bases, attrs):
        # Create class
        super(MetaInstanceRegistry, cls).__init__(name, bases, attrs)
        # Initialize fresh instance storage
        cls._instances = weakref.WeakSet()
    def __call__(cls, *args, **kwargs):
        # Create instance (calls __init__ and __new__ methods)
        inst = super(MetaInstanceRegistry, cls).__call__(*args, **kwargs)
        # Store weak reference to instance. WeakSet will automatically remove
        # references to objects that have been garbage collected
        cls._instances.add(inst)
        return inst
    def _get_instances(cls, recursive=False):
        """Get all instances of this class in the registry. If recursive=True
        search subclasses recursively"""
        instances = list(cls._instances)
        if recursive:
            for Child in cls.__subclasses__():
                instances += Child._get_instances(recursive=recursive)
        # Remove duplicates from multiple inheritance.
        return list(set(instances))
Usage: Create a registry and subclass it.
class Registry(object):
    __metaclass__ = MetaInstanceRegistry
class Base(Registry):
    def __init__(self, x):
        self.x = x
class A(Base):
    pass
class B(Base):
    pass
class C(B):
    pass
a = A(x=1)
a2 = A(2)
b = B(x=3)
c = C(4)
for cls in [Base, A, B, C]:
    print cls.__name__
    print cls._get_instances()
    print cls._get_instances(recursive=True)
    print
del c
print C._get_instances()
If using abstract base classes from the abc module, just subclass abc.ABCMeta to avoid metaclass conflicts:
from abc import ABCMeta, abstractmethod
class ABCMetaInstanceRegistry(MetaInstanceRegistry, ABCMeta):
    pass
class ABCRegistry(object):
    __metaclass__ = ABCMetaInstanceRegistry
class ABCBase(ABCRegistry):
    __metaclass__ = ABCMeta
    @abstractmethod
    def f(self):
        pass
class E(ABCBase):
    def __init__(self, x):
        self.x = x
    def f(self):
        return self.x
e = E(x=5)
print E._get_instances()