Basic structure of a class

# py:3.5
class Person(object):

    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

    def get_name(self):
        return self.name

    def get_gender(self):
        return self.gender

    def __str__(self):
        return "%s is a %s" % (self.get_name(), self.get_gender())

Subclassing

# py:3.5
class Citizen(Person):

    def __init__(self, name, country, gender):
        super.__init__(self, name, gender)
        self.country = country

    def get_nationality(self):
        return self.country

class SecretAgent(Citizen):

    def __init__(self, name, country, gender, isActive):
        super().__init__(name, country, gender)
        self.isActive = isActive
    # Method overriding
    def get_name(self):
        return "###Redacted###"

    def get_gender(self):
        return "###Redacted###"

    def get_nationality(self):
        return "###Redacted###"

    def get_status(self):
        return self.isActive
>>> jack = Citizen("Jack", "Tanzania", "Male")
>>> print jack.get_name()
Jack

>>> Light909 = SecretAgent("Jane", "Ukraine", "Female", False)
>>> Dark552 = SecretAgent("Jim", "Spain", "Male", True)
>>> print Light909.get_name()
###Redacted###