Python: How do I make a subclass from a superclass?

Viewed 184054

In Python, how do you make a subclass from a superclass?

13 Answers

In the answers above, the super is initialized without any (keyword) arguments. Often, however, you would like to do that, as well as pass on some 'custom' arguments of your own. Here is an example which illustrates this use case:

class SortedList(list):
    def __init__(self, *args, reverse=False, **kwargs):
        super().__init__(*args, **kwargs)       # Initialize the super class
        self.reverse = reverse
        self.sort(reverse=self.reverse)         # Do additional things with the custom keyword arguments

This is a subclass of list which, when initialized, immediately sorts itself in the direction specified by the reverse keyword argument, as the following tests illustrate:

import pytest

def test_1():
    assert SortedList([5, 2, 3]) == [2, 3, 5]

def test_2():
    SortedList([5, 2, 3], reverse=True) == [5, 3, 2]

def test_3():
    with pytest.raises(TypeError):
        sorted_list = SortedList([5, 2, 3], True)   # This doesn't work because 'reverse' must be passed as a keyword argument

if __name__ == "__main__":
    pytest.main([__file__])

Thanks to the passing on of *args to super, the list can be initialized and populated with items instead of only being empty. (Note that reverse is a keyword-only argument in accordance with PEP 3102).

this is a small code:

# create a parent class

class Person(object):
    def __init__(self):
        pass

    def getclass(self):
        return 'I am a Person'
# create two subclass from Parent_class

class Student(Person):
    def __init__(self):
        super(Student, self).__init__()

    def getclass(self):
        return 'I am a student'


class Teacher(Person):
    def __init__(self):
        super(Teacher, self).__init__()

    def getclass(self):
        return 'I am a teacher'


person1 = Person()
print(person1.getclass())

student1 = Student()
print(student1.getclass())

teacher1 = Teacher()
print(teacher1.getclass())

show result:

I am a Person
I am a student
I am a teacher

A minor addition to @thompsongunner's answer.

To pass args to your superclass (parent), just use the function signature of the parent class:

class MySubClassBetter(MySuperClass):
    def __init__(self, someArg, someKwarg="someKwarg"):
        super().__init__(someArg, someKwarg=someKwarg)

You are calling the parent's __init__() method as if you are constructing any other class which is why you don't need to include self.

Related