Diamond Shape Inheritance

diamond shape inheritance គឺ​ជា​ការបន្ត​ថ្នាក់​ម៉្យាង​ដែល​មាន​ទំរង់​ជា​ចតុកោណស្មើ ពោល​គឺ​ជា​ការបង្កើត​ថ្នាក់​មួយ​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ពីរ​ទៀត ដែលត្រូវ​បាន​តភ្ជាប់​ទៅ​នឹង​ថ្នាក់​តែ​មួយ​ដូច​គ្នា​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖

class Geometry():
    radian = 180

    def display(self, info):
        print(info)


class Surface(Geometry):
    pi = 3.14

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

    def surface(self):
        return self.dimension


class Volume(Geometry):
    pi = 3.1415

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

    def volume(self):
        return self.dimension


class Cube(Surface, Volume):
    def __init__(self, width, height, depth):
        Surface.__init__(self, width, height)
        Volume.__init__(self, width, height, depth)

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

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

ការបន្ត​ថ្នាក់​តាម​របៀប​ដូច​នៅ​ក្នុង​រូប​ខាង​លើ​នេះ ត្រូវ​ហៅ​ថា diamond shape inheritance ពីព្រោះ​ទំរង់​របស់​វា​មាន​រាង​ជា​ diamond ឬ​ចតុកោណ​ស្មើ​។

ក្នុង​ករណី​មាន​ការបន្ត​ថ្នាក់​មាន​រាង​ចតុកោណ​ស្មើ នៅ​ពេល​ដែល​ attribute ណា​មួយ​ត្រូវ​យក​មក​ប្រើ ការស្វែង​រក​ attribute នោះ​ត្រូវ​ធ្វើ​ឡើង​ទៅ​តាម​គំនូស​បំព្រួញដូច​ខាង​ក្រោម​នេះ៖

មាន​ន័យ​ថា នៅ​ពេល​ដែល attribute ណា​មួយ​ត្រូវ​យក​មក​ប្រើ​តាម​រយៈ​ instance ឬ​ថ្នាក់​ណា​មួយ ការស្វែង​រក​វត្ថុ​នោះ ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​ instance នោះ​មុន រួច​បាន​ឡើង​ទៅ​ថ្នាក់​ផ្សេង​ៗ​ទៀត តាម​សញ្ញា​ព្រួញ​រហូត​ដល់ attribute នោះ​ត្រូវ​រក​ឃើញ​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖

class Geometry():
    radian = 180

    def display(self, info):
        print(info)


class Surface(Geometry):
    pi = 3.14

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

    def surface(self):
        return self.dimension


class Volume(Geometry):
    pi = 3.1415

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

    def volume(self):
        return self.dimension


class Cube(Surface, Volume):
    def __init__(self, width, height, depth):
        Surface.__init__(self, width, height)
        Volume.__init__(self, width, height, depth)

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

    def volume(self):
        dimension = Volume.volume(self)
        v = dimension[0] * dimension[1] * 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.14