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

 

យើង​គួរ​រំលឹក​ឡើង​វិញ​ថា នៅ​ពេល​ដែល​យើង​យក​វិធី​ណា​មួយ​មក​ប្រើ​តាម​រយៈ​ instance ណា​មួយ instance នោះ​នឹង​ត្រូវ​ផ្តល់​ជា argument អោយ​ទៅ parameter នៅ​ក្នុង​វិធី​នោះ​ជា​ស្វ័យប្រវត្តិ​។ យន្តការ​នេះ​ជា​ច្បាប់​នៅ​ក្នុង​ភាសា Python ។

 

ប្រការ​ដ៏​សំខាន់​មួយ​ទៀត​នោះ​គឺ​ថា instance គឺ​ជា​វត្ថុ​ដែល​ជា​កន្លែង​ទទេ​ស្អាត​មួយ​នៅ​ក្នុង​សតិ​របស់​ឧបករណ៍​អេឡិចត្រូនិក ដូចនេះ​យើង​អាច​បង្កើត​វត្ថុ​ផ្សេង​ៗ​ទៀត​ទុក​នៅ​ទីនោះ ដើម្បី​កុំ​អោយ​ច្រឡំ​ទៅ​នឹង​វត្ថុ​ដទៃ​ទៀត ដែល​មាន​ឈ្មោះ​ដូច​គ្នា​។ ហើយ​ដើម្បី​បង្កើត​វត្ថុ​ផ្សេង​ៗ​ទុក​នៅ​ក្នុង instance យើង​ត្រូវ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

 

class Area():
    pi = 3.14
 
    def __init__(self):
        print('The constructor has been called.')
 
    def rectangle(self, width, height):
        area = width * height
        return area
 
 
instance = Area()
instance.width = 25
instance.height = 5
 
print(instance.width)
print(instance.height)

 

នៅ​ក្នុង​កម្មវិធី​ខាង​លើ យើង​ឃើញ​ថា ​វត្ថុ​ឈ្មោះ width និង​វត្ថុ​ឈ្មោះ height ត្រូវ​បាន​បង្កើត​ឡើង​និង​ទុក​នៅ​ក្នុង instance នៃ​ថ្នាក់​ឈ្មោះ Area ។ វត្ថុ​ទាំង​នោះ​ត្រូវ​ហៅ​ថា instance attribute ដែល​អាច​ជា​វត្ថុ​ប្រភេទ​ណា​ក៏​បាន​ដែរ​។ ក៏ប៉ុន្តែ ភាគ​ច្រើន គេ​និយម​បង្កើត​វត្ថុ​ដែល​ជា​ទិន្នន័យ​ផ្សេង​ៗ​ទុក​នៅ​ក្នុង instance ដើម្បី​កុំ​អោយ​ច្រឡំ​ទៅ​នឹង​វត្ថុ​ផ្សេង​ៗ​ទៀត ដែល​មាន​ឈ្មោះ​ដូច​គ្នា​។

 

យ៉ាងណាម៉ិញ ការបង្កើត instance attribute អាច​ត្រូវ​ធ្វើ​ឡើង​តាម​របៀប​មួយ​ទៀត​ដូច​ខាង​ក្រោម​នេះ៖

 

class Area():
    pi = 3.14
 
    def __init__(self, width, height):
        self.width = width
        self.height = height
 
    def rectangle(self, width, height):
        area = width * height
        return area
 
 
instance = Area(25, 5)
 
print(instance.width)
print(instance.height)

 

យើង​ឃើញ​ថា ការបង្កើត instance attribute អាច​ត្រូវ​ធ្វើ​ឡើង​នៅ​ខាង​ក្រៅ​ថ្នាក់​ក៏​បាន​ និង​ឬ​នៅ​ក្នុង​ថ្នាក់​ក៏​បាន​។ ក៏ប៉ុន្តែ ការបង្កើត instance attribute នៅ​ខាង​ក្នុង​ថ្នាក់ គឺ​ត្រូវ​ធ្វើ​ឡើង​នៅ​ក្នុង​វិធី​ណាមួយ ហើយ​ជា​ទូទៅ គេ​ច្រើន​ប្រើ constructor ជា​កន្លែង​សំរាប់​បង្កើត instance attribute ផ្សេង​ៗ​។ អាស្រ័យ​ហេតុ​នេះ បាន​ជា constructor នៅ​ក្នុង​ភាសា Python មាន​ឈ្មោះ​ជា __init__ ព្រោះ​វា​មាន​នាទី​ជា​អ្នក​បង្កើត instance attribute ទាំងឡាយ​។

 

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

 

class Area():
    pi = 3.14
 
    def __init__(self, width, height):
        self.width = width
        self.height = height
 
    def attribute(self, width):
        self.width = width
 
    def rectangle(self, width, height):
        area = width * height
        return area
 
 
instance = Area(25, 5)
instance.attribute(50)
instance.height = 10
 
print('New width is', instance.width)
print('New height is', instance.height)

 

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

 

class Area():
    pi = 3.14
 
    def __init__(self, pi):
        self.pi = pi
 
    def rectangle(self, width, height):
        area = width * height
        return area
 
 
instance1 = Area(3.1415)
instance2 = Area(3.141492)
 
print('The value of pi in the Area class is', Area.pi)
print('The value of pi in instance1 is', instance1.pi)
print('The value of pi in instance2 is', instance2.pi)

 

ដោយ​ហេតុ​ថា យើង​អាច​បង្កើត instance attribute មាន​ឈ្មោះ​ដូច​គ្នា​ទៅ​នឹង data attribute និង instance attribute ដ៏ទៃ​ទៀត អាស្រ័យ​ហេតុ​នេះ ការប់ុនប៉ង​យក​ data attribute នៅ​ក្នុង​ថ្នាក់​មក​ធ្វើ​ការដោះដូរ​តាម​រយៈ instance គឹ​ជា​ការបង្កើត instance attribute ថ្មី​ទៅ​វិញ​ទេ​។ ពិនិត្យ​កម្មវិធី​ខាង​ក្រោម​នេះ៖

 

class Area():
    pi = 3.14
 
    def __init__(self):
        print('The constructor has been called.')
 
    def rectangle(self, width, height):
        area = width * height
        return area
 
 
instance = Area()
instance.pi = 3.1415
 
print('The value of data attribute pi is', Area.pi)
print('The value of instance attribute pi is', instance.pi)

 

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