Some simple code to show the differences between using namedtuple
from the collections
module and NamedTuple
from the typing
module. Extra points for using type hinting.
Using namedtuple
from the collections
module:
>>> from platforms_namedtuple_35 import *
>>> system_1 = RHEL7
>>> system_2 = RHEL5
>>> print(system_1)
OperatingSystem(distribution_id='Maipo', distribution_name='Red Hat Enterprise Linux Server', distribution_version='7.3', kernel_name='3.10.0-514
.el7', lsb_dist_id=' RedHatEnterpriseServer', manufacturer='Red Hat', operating_system='RedHat', os_family='Linux')
>>> print(system_2)
OperatingSystem(distribution_id='Tikanga', distribution_name='Red Hat Enterprise Linux Server', distribution_version='5.11', kernel_name='2.6.18-
398.el5', lsb_dist_id=' RedHatEnterpriseServer', manufacturer='Red Hat', operating_system='RedHat', os_family='Linux')
>>> print(system_1.kernel_name)
3.10.0-514.el7
>>> print(system_2.kernel_name)
2.6.18-398.el5
>>> print(system_1.to_json())
{
"distribution_id": "Maipo",
"distribution_name": "Red Hat Enterprise Linux Server",
"distribution_version": "7.3",
"kernel_name": "3.10.0-514.el7",
"lsb_dist_id": " RedHatEnterpriseServer",
"manufacturer": "Red Hat",
"operating_system": "RedHat",
"os_family": "Linux"
}
Using typing.NamedTuple
module (requires Python >= 3.6.1 to take advantage of default values):
>>> from platforms_namedtuple_36 import *
>>> system_1 = RHEL7()
>>> system_2 = RHEL5()
>>> print(system_1)
<OperatingSystem: Red Hat Enterprise Linux Server release 7.3 (Maipo)>
>>> print(system_2)
<OperatingSystem: Red Hat Enterprise Linux Server release 5.11 (Tikanga)>
>>> print(system_1.kernel_name)
3.10.0-514.el7
>>> print(system_2.kernel_name)
2.6.18-398.el5
>>> print(system_1.to_json())
{
"distribution_id": "Maipo",
"distribution_name": "Red Hat Enterprise Linux Server",
"distribution_version": "7.3",
"kernel_name": "3.10.0-514.el7",
"lsb_dist_id": "RedHatEnterpriseServer",
"manufacturer": "Red Hat",
"operating_system": "RedHat",
"os_family": "Linux"
}