Class Attribute

យើង​បាន​ដឹង​រួច​មក​ហើយ​ថា ការ 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)
3.14
3.14
The area of the rectangle is 125
The area of the rectangle is 125

ដូចនេះ យើង​ឃើញថា ដើម្បី​អាច​យក 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)
class Area(builtins.object)
 |  Methods defined here:
 |  
 |  circle_area(self, radius)
 |  
 |  rectangle(self, width, height)
 |  
 |  ----------------------------------------------------------------------
 |  Data descriptors defined here:
 |  
 |  __dict__
 |      dictionary for instance variables (if defined)
 |  
 |  __weakref__
 |      list of weak references to the object (if defined)
 |  
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |  
 |  dimension = [25, 5]
 |  
 |  pi = 3.14