What is a clean, pythonic way to have multiple constructors in Python?

后端 未结 13 2303
醉梦人生
醉梦人生 2020-11-22 07:12

I can\'t find a definitive answer for this. As far as I know, you can\'t have multiple __init__ functions in a Python class. So how do I solve this problem?

13条回答
  •  梦如初夏
    2020-11-22 07:24

    class Cheese:
        def __init__(self, *args, **kwargs):
            """A user-friendly initialiser for the general-purpose constructor.
            """
            ...
    
        def _init_parmesan(self, *args, **kwargs):
            """A special initialiser for Parmesan cheese.
            """
            ...
    
        def _init_gauda(self, *args, **kwargs):
            """A special initialiser for Gauda cheese.
            """
            ...
    
        @classmethod
        def make_parmesan(cls, *args, **kwargs):
            new = cls.__new__(cls)
            new._init_parmesan(*args, **kwargs)
            return new
    
        @classmethod
        def make_gauda(cls, *args, **kwargs):
            new = cls.__new__(cls)
            new._init_gauda(*args, **kwargs)
            return new
    

提交回复
热议问题