យើង​បាន​ដឹង​រួច​មក​ហើយ​ថា ការ call ថ្នាក់ មិន​មែន​ជា​ការយក attribute នៅ​ក្នុង​ថ្នាក់​មក​ប្រើ​នោះ​ទេ វា​គឺ​ជា​ការបង្កើត​វត្ថុ​ដែល​ជា instance នៃ​ថ្នាក់​នោះ​។ ហើយ​បើ​យើង​ចង់​យក​ attribute ផ្សេង​ៗ​នៅ​ក្នុង​ថ្នាក់​មក​ប្រើ យើង​ត្រូវ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ​៖

 

class Area():
    pi = 3.14
 
    def rectangle(self, width, height):
        area = width * height
        print('The area of the rectangle is', area)
 
instance = Area()
print(Area.pi)
print(instance.pi)
Area.rectangle(instance, 25, 5)
instance.rectangle(25, 5)

 

ដូចនេះ យើង​ឃើញថា ដើម្បី​អាច​យក attribute ដែល​ជា method នៅ​ក្នុង​ថ្នាក់​ណា​មួយ​មក​ប្រើប្រាស់​បាន យើង​ចាំបាច់​ត្រូវ​តែ​បង្កើត instance នៃ​ថ្នាក់​នោះ​ជា​មុន​សិន រួច​សឹម​យក​ method ទាំងនោះ​មក​ប្រើ​តាម​រយៈថ្នាក់​ឬ instance របស់​ថ្នាក់​នោះ​ជា​ក្រោយ​។ បាន​ន័យថា យើង​មិន​អាច​យក​ attribute នៅ​ក្នុង​ថ្នាក់​មក​ប្រើ​ដោយ​ផ្ទាល់​បាន​ឡើយ​។

 

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

 

យ៉ាងណាម៉ិញ ក្រៅ​ពី​ការយក​ attibute នៅ​ក្នុង​ថ្នាក់​ណាមួយ​មក​ប្រើ យើង​ក៏​អាច​បង្កើត​ attribute ថ្មី​ៗ​ទៀត​សំរាប់​ថ្នាក់​នោះ​បាន​ដែរ ដោយ​ធ្វើ​ដូច​ខាង​ក្រោម​នេះ៖

 

def circle_area(self, radius):
    s = radius * radius * 3.14
    print('The area of the circle is', s)
 
dimension = [25, 5]
 
class Area():
    pi = 3.14
 
    def rectangle(self, width, height):
        area = width * height
        print('The area of the rectangle is', area)
 
Area.circle_area = circle_area
Area.dimension = dimension
 
help(Area)