Страницы

Поиск по вопросам

четверг, 19 декабря 2019 г.

Несколько конструкторов с разным количеством аргументов

#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) # тут у нас получиться маленький тролль с ником ололо

Комментариев нет:

Отправить комментарий