Multiple Classes
inner classes.py
#note - it is recommended NOT to use inner (aka #nested) classes, as the nesting does not imply #any particular relationship between inner and #outer classes. With that said, here is example: class Human: num_of_humans = 0 def __init__(self, lastname): Human.num_of_humans = Human.num_of_humans + 1 self.lastname = lastname self.head = self.Head() self.brain = self.Brain() #these are "inner" or "nested" classes: class Head: #this isn't great design - referring to outer class: def talk(self, outer_instance): print(outer_instance.lastname + " is talking...") class Brain: def think(self): print("a brain is thinking...") #---------MAIN--------- caroline = Human("Chisholm") caroline.head.talk(caroline) caroline.brain.think() tom = Human("Cruise") print(Human.num_of_humans, "humans created so far.")
inheritance.py
class Alive: number = 0 def __init__(self, name): self.name = name Alive.number = Alive.number + 1 #Human "inherits" the properties of the Alive class, #and in this case we will access the instance #variable self.name which was defined in Alive class: class Human(Alive): def talk(self): print(self.name + " now speaking.") #each Dog also inherits a self.name (Alive class) #so no need to redefine here: class Dog(Alive): #no self - this is a class method: def woof(): return "bow wow" #---------MAIN--------- caroline = Human("Chisholm") tom = Human("Cruise") santas = Dog("little-helper") #instance variable, caroline.name and santas.name: print(caroline.name) print(santas.name) #instance method, tom.talk(): tom.talk() #class method, Dog.woof(): print(Dog.woof()) #note - fido.woof() would not work here. #class variable, Alive.number: print(Alive.number)