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()

 

អាស្រ័យហេតុ​នេះ នៅ​ពេល​ដែល 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)

 

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