- ru
- Language: en
- Documentation version: latest
Метод __init__
Для корректной работы метода info, необходимо чтобы у экземпляра были переменные hostname и model. Если этих переменных нет, возникнет ошибка:
In [15]: class Switch:
...: def info(self):
...: print('Hostname: {}\nModel: {}'.format(self.hostname, self.model))
...:
In [59]: sw2 = Switch()
In [60]: sw2.info()
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-60-5a006dd8aae1> in <module>()
----> 1 sw2.info()
<ipython-input-57-30b05739380d> in info(self)
1 class Switch:
2 def info(self):
----> 3 print('Hostname: {}\nModel: {}'.format(self.hostname, self.model))
AttributeError: 'Switch' object has no attribute 'hostname'
Практически всегда, при создании объекта, у него есть какие-то начальные данные. Например, чтобы создать подключение к оборудование с помощью netmiko, надо передать параметры подключения.
В Python эти начальные данные про объект указываются в методе
__init__
. Метод __init__
выполняется после того как Python
создал новый экземпляр и, при этом, методу __init__
передаются
аргументы с которыми был создан экземпляр:
In [32]: class Switch:
...: def __init__(self, hostname, model):
...: self.hostname = hostname
...: self.model = model
...:
...: def info(self):
...: print('Hostname: {}\nModel: {}'.format(self.hostname, self.model))
...:
Обратите внимание на то, что у каждого экземпляра, который создан из этого класса,
будут созданы переменные: self.model
и self.hostname
.
Теперь, при создании экземпляра класса Switch, обязательно надо указать hostname и model:
In [33]: sw1 = Switch('sw1', 'Cisco 3850')
И, соответственно, метод info отрабатывает без ошибок:
In [36]: sw1.info()
Hostname: sw1
Model: Cisco 3850
Note
Метод __init__
иногда называют конструктором класса, хотя
технически в Python сначала выполняется метод __new__
, а затем
__init__
. В большинстве случаев, метод __new__
использовать
не нужно.
Важной особенностью метода __init__
является то, что он не должен
ничего возвращать. Python сгенерирует исключение, если попытаться это
сделать.