Method __init__#
For info method to work correctly the instance should have hostname and
model variables. If these variables are not available, an error will occur:
In [15]: class Switch:
...: def info(self):
...: print(f'Hostname: {self.hostname}\nModel: {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(f'Hostname: {self.hostname}\nModel: {self.model}')
AttributeError: 'Switch' object has no attribute 'hostname'
Almost always, when an object is created it has some initial data. For example, to create a connection to device with netmiko you have to pass connection parameters.
In Python these initial object data are specified in __init__.
Method __init__ is executed after Python has created a new instance
and __init__ method is passed arguments with which instance was created:
In [32]: class Switch:
...: def __init__(self, hostname, model):
...: self.hostname = hostname
...: self.model = model
...:
...: def info(self):
...: print(f'Hostname: {self.hostname}\nModel: {self.model}')
...:
Note that each instance created from this class will have variables:
self.model and self.hostname.
Now, when creating an instance of Switch class you have to specify
hostname and model:
In [33]: sw1 = Switch('sw1', 'Cisco 3850')
Accordingly, info method works without error:
In [36]: sw1.info()
Hostname: sw1
Model: Cisco 3850
Note
__init__ method is sometimes called a class constructor, although
technically in Python __new__ method is executed first and then
__init__. In most cases there is no necessety to create
__new__ method.
An important feature of __init__ method is that it should not return
anything. Python will generate an exception if it tries to do this.