#python #ооп
Можно ли в Python в одном классе делать несколько конструкторов с разным количеством аргументов? class a: def __init__(self,b): pass def __init__(self): pass В данном случае можно создавать экземпляры класса только со вторым констуктором, в то время как запись x = a(42) вызовет ошибку.
Ответы
Ответ 1
Если быть кратким то НЕТ. Более детально посмотрите обсуждение вот ЗДЕСЬ. Там и варианты решений есть такие как использование необязательных или ключевых аргументов.Ответ 2
В Python'е перегрузок функций (а конструктор, по факту - это функция) нет в принципе. В вашем случае, вызывается всегда второй конструктор, ибо инструкция def означает "создать объект функции и присвоить этот объект написанному имени", то есть, сначала вы присваиваете имени __init__ одну функцию (с параметром b), а затем - тому же имени - другую функцию, уже без параметра b. Поведение, которого вы добиваетесь, можно получить, используя параметры по умолчанию, например: def __init__(self, b=None): # Здесь лучше придумать что-то отличное от проверки на None # больше соответствующее вашей задаче. Возможно, вам просто подойдет # какое-то значение по умолчанию. if b is None: pass else: pass # ... a = a() # b будет равно None по умолчанию b = a(42) # b будет равно 42Ответ 3
еще вариант def __init__(self, *args, **kwargs): p = kwargs.get('name','trololo')Ответ 4
а не проще сделать так: class Troll(): def __init__(self, name='trololo', size=42) # ...... a = Troll() # а тут тролль по умолчанию - trololol, 42 b = Troll('ololol', 12) # тут у нас получиться маленький тролль с ником ололо
Комментариев нет:
Отправить комментарий