Source: https://cs.gmu.edu/~marks/211/textbook/06-classes-and-objects.pdf