How define constructor implementation for an Abstract Class in Python?

前端 未结 5 1156
难免孤独
难免孤独 2020-12-29 01:32

I am trying to declare an abstract class A with a constructor with a default behavior: all subclasses must initialize a member self.n:



        
5条回答
  •  醉话见心
    2020-12-29 02:14

    You can override __new__ method to prevent direct instantiation.

    class A(object):
        __metaclass__ = ABCMeta
    
        def __new__(cls, *args, **kwargs):
            if cls is A:
                raise TypeError(
                    "TypeError: Can't instantiate abstract class {name} directly".format(name=cls.__name__)
                )
            return object.__new__(cls)
    

    Output:

    >>> A()
    Traceback (most recent call last):
      File "", line 1, in 
        A()
      File "/Users/ashwini/py/so.py", line 11, in __new__
        "TypeError: Can't instantiate abstract class {name} directly".format(name=cls.__name__)
    TypeError: TypeError: Can't instantiate abstract class A directly
    

提交回复
热议问题