Multiple Inheritance

multiple inheritance គឺ​ជា​ការបង្កើត​ថ្នាក់​មួយ​បន្ត​ចេញ​ពី​ថ្នាក់​មួយ​ចំនួន​ទៀត ក្នុង​ពេល​តែ​មួយ​។ ការបង្កើត multiple inheritance ត្រូវ​ធ្វើ​ឡើង​ដូច​ខាង​ក្រោម​នេះ៖

class Area():
    pi = 3.14

    def __init__(self, *dimension):
        self.dimension = dimension

    def surface(self):
        return self.dimension


class Volume():
    pi = 3.1415

    def __init__(self, *dimension):
        self.dimension = dimension

    def volume(self):
        return self.dimension


class Cube(Area, Volume):
    pi = 3.141592

    def __init__(self, *dimension):
        self.dimension = dimension

    def surface(self):
        s = self.dimension[0] * self.dimension[1] * 6
        print("The cube's surface is", s)

    def volume(self):
        v = self.dimension[0] * self.dimension[1] * self.dimension[2]
        print("The cube's volume is", v)

        

ក្នុង​ករណី​មាន​ការបង្កើត multiple inheritance នៅ​ពេល​ដែល attribute ផ្សេង​ៗ​ត្រូវ​យក​ទៅ​ប្រើ ការស្វែង​រក attribute ទាំងនោះ ត្រូវ​ធ្វើ​ឡើង​ដូច​នៅ​ក្នុង​រូប​ខាង​ក្រោម​នេះ៖



រូប​ខាង​លើ​នេះ​បង្ហាញ​ថា បើ​សិន​ជា​ការយក​ attribute នានា​ទៅ​ប្រើ​តាម​រយៈ instance នៃ subclass ការស្វែង​រក​វត្ថុ​នោះ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​ instance ​នោះ​មុន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​របស់​វា រួច​ឡើង​ទៅ superclass របស់​វា ជា​បន្តបន្ទាប់​តាម​សញ្ញា​ព្រួញ រហូត​ដល់ attribute នោះ​ត្រូវ​រក​ឃើញ​ទើប​ឈប់​។ ហើយ​ក្នុង​ករណី​ដែល​មាន​ attribute មាន​ឈ្មោះ​ដូច​គ្នា​ជា​ច្រើន​នៅ​ក្នុង​ថ្នាក់​ទាំងនោះ attribute ដែល​ត្រូវ​យក​មក​ប្រើ គឺ​ជា​ attribute ដែល​ត្រូវ​រក​ឃើញ​មុន​គេ​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖

class Area():
    pi = 3.14

    def __init__(self, *dimension):
        self.dimension = dimension

    def surface(self):
        return self.dimension


class Volume():
    pi = 3.1415

    def __init__(self, *dimension):
        self.dimension = dimension

    def volume(self):
        return self.dimension


class Cube(Area, Volume):
    pi = 3.141592

    def __init__(self, *dimension):
        self.dimension = dimension

    def surface(self):
        s = self.dimension[0] * self.dimension[1] * 6
        print("The cube's surface is", s)

    def volume(self):
        v = self.dimension[0] * self.dimension[1] * self.dimension[2]
        print("The cube's volume is", v)


cube = Cube(25, 5, 10)

cube.surface()
cube.volume()
print("The value of pi is", cube.pi)
The cube's surface is 750
The cube's volume is 1250
The value of pi is 3.141592

ចំពោះ overridden method នៅ​ក្នុង superclass បើ​សិន​ជា​យើង​ចង់​ call method ទាំងនោះ​នៅ​ក្នុង subclass យើង​ត្រូវ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

class Area():
    pi = 3.14

    def __init__(self, *dimension):
        self.dimension = dimension

    def surface(self):
        return self.dimension


class Volume():
    pi = 3.1415

    def __init__(self, *dimension):
        self.dimension = dimension

    def volume(self):
        return self.dimension


class Cube(Area, Volume):
    pi = 3.141592

    def __init__(self, width, height, depth):
        super().__init__(width, height)
        Volume.__init__(self, width, height, depth)

    def surface(self):
        dimension = super().surface()
        s = dimension[0] * dimension[1] * 6
        print("The cube's surface is", s)

    def volume(self):
        dimension = super().volume()
        v = dimension[0] * dimension[1] * dimension[2]
        print("The cube's volume is", v)


cube = Cube(25, 5, 10)

cube.surface()
cube.volume()
The cube's surface is 750
The cube's volume is 1250