Inheritance

inheritance គឺ​ជា​ការបង្កើត​ថ្នាក់​មួយ​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ផ្សេង​ៗ​ទៀត​។ ហើយ​ដើម្បី​បង្កើត​ថ្នាក់​មួយ​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​មួយ​ទៀត យើង​ត្រូវ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

class Area():
    pi = 3.14

    def __init__(self):
        print('The constructor has been called.')

    def surface(self):
        print('surface')


class Rectangle(Area):
    def surface(self, width, height):
        area = width * height
        print('The area of rectangle is', area)
        
        

នៅ​លើ​បន្ទាត់​លេខ 11 ការសរសេរ​ថា class Rectangle(Area): គឺ​ជា​ការបង្កើត​ថ្នាក់​ឈ្មោះ Rectangle មួយ​ដោយ​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​ឈ្មោះ Area ។ ក្នុង​ករណីនេះ ថ្នាក់​ឈ្មោះ Area ត្រូវ​ចាត់​ទុក​ថា​ជា superclass ចំណែក​ឯ​ថ្នាក់​ឈ្មោះ Rectangle ត្រូវ​ចាត់ទុក​ថា​ជា subclass

យ៉ាងណាម៉ិញ ផល​ប្រយោជន៍​នៃ​ inheritance គឺ​ថា​តាម​រយៈ subclass យើង​អាច​យក attribute នៅ​ក្នុង superclass មក​ប្រើប្រាស់​បាន​តាម​សេចក្តី​ត្រូវការ​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖

class Area():
    pi = 3.14

    def __init__(self):
        print('The constructor has been called.')

    def surface(self):
        print('surface')


class Rectangle(Area):
    def rec_surface(self, width=0, height=0):
        area = width * height
        print('The area of rectangle is', area)


rectangle = Rectangle()

print('The value of pi is', rectangle.pi)
rectangle.rec_surface()
rectangle.surface()
The constructor has been called.
The value of pi is 3.14
The area of rectangle is 0
surface

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

នៅ​ក្នុង inheritance យើង​អាច​យក​ថ្នាក់​ចំនួន​ប៉ុន្មាន​ក៏​បាន​ដែរ​មក​បន្តគ្នា​។ ពោល​គឺ​យើង​អាច​បង្កើត​ថ្នាក់​មួយ​បន្ត​ភ្ជាប់​ទៅ​នឹង​ថ្នាក់​មួយ​ទៀត ដែល​ត្រូវ​បាន​បន្តភ្ជាប់​ទៅ​នឹង​ថ្នាក់​មួយ​ទៀត ដែល​ត្រូវ​បាន​បន្តភ្ជាប់​ទៅ​នឹង​ថ្នាក់​មួយ​ទៀត​...

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

class Area():
    pi = 3.14

    def __init__(self):
        print('The constructor has been called.')

    def surface(self):
        print('surface')


class Rectangle(Area):
    def rec_surface(self, width=0, height=0):
        area = width * height
        print('The area of rectangle is', area)


class Triangle(Rectangle):
    def tri_surface(self, edge, height):
        surface = edge * height / 2
        print('The area of triangle is', surface)


triangle = Triangle()
triangle.tri_surface(25, 5)
triangle.rec_surface(25, 5)
print('The value of pi is', triangle.pi)
The constructor has been called.
The area of triangle is 62.5
The area of rectangle is 125
The value of pi is 3.14

សរុបមក យើង​ឃើញ​ថា នៅ​ពេល​ដែល attribute ណា​មួយ​ត្រូវ​យក​មក​ប្រើ​តាម​រយៈ instance ឬ​ថ្នាក់​ណា​មួយ ការស្វែង​រក​វត្ថុ​ពីរ​ប្រភេទ​ត្រូវ​ធ្វើ​ឡើង​ក្នុង​ពេល​ជាមួយ​គ្នា​។ ជា​ដំបូង ការស្វែង​រក​វត្ថុ​ដែល​ជា instance ឬ​ថ្នាក់ដែល​តាម​រយៈ​វា attribute នោះ​ត្រូវ​បាន​យក​មក​ប្រើ​។ ហើយ​ការស្វែង​រក​វត្ថុ​ដែល​ជា instance ឬ​ថ្នាក់​នោះ ត្រូវ​ធ្វើ​ឡើង​ដោយ​អនុលោម​ទៅ​តាម​វិធាន​នៃ​ការស្វែង​រក​វត្ថុ​នៅ​ក្នុង scope ផ្សេង​ៗ​។ បន្ទាប់​មក​ទៀត គឺ​ការស្វែង​រក​វត្ថុ​ដែល​ attribute ត្រូវ​យក​មក​ប្រើ​។ ហើយ​ការស្វែង​រក​ attribute នោះ ត្រូវ​ធ្វើ​ឡើង​ដោយ​អនុលោម​ទៅ​តាម​វិធាន​នៃ​ការស្វែង​រក attribute នៅ​ក្នុង instance ឬ​នៅ​ក្នុង​ថ្នាក់​ផ្សេង​ៗ​៕