Method

method ក៏​ជា​ function ដូច​ជា​ function ដទៃ​ទៀត​នៅ​ខាង​ក្រៅ​ថ្នាក់​ដែរ​ តែ​ method ខុស​ពី function ទាំងនោះ​ នៅ​ត្រង់​ថា​ parameter នៅ​ក្នុង method ត្រូវ​មាន​ចំនួន​លើស​ពី argument មួយ​ជានិច្ច​។ បាន​ន័យ​ថា បើ​ method ត្រូវការ argument ចំនួន n, parameter នៅ​ក្នង​ method ត្រូវ​តែ​មាន​ចំនួន n + 1 ហើយ​ parameter ដែល​លើស​មួយ​នោះ ត្រូវ​តែ​ជា parameter នៅ​ខាង​ដើម​គេ​បំផុត​។

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

class Area():
    pi = 3.14

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

    def rectangle(self, width, height):
        area = width * height
        print('The area of the rectangle is', area)

instance = Area()
instance.rectangle(25, 5)
The constructor was called.
The area of the rectangle is 125

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

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

class Area():
    pi = 3.14

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

    def rectangle(self, width, height):
        area = width * height
        return area

    def display(self, width, height):
        print('pi is', Area.pi)
        print('The area of the rectangle is', self.rectangle(width, height))

instance = Area()
instance.display(25, 5)
The constructor was called.
pi is 3.14
The area of the rectangle is 125

ចំពោះ constructor វិញ វា​ក៏​ជា​ method មួយ​ដូច​ជា method ដទៃ​ទៀត​ដែរ ដូចនេះ constructor អាច​ទទួល​យក​ argument ផ្សេង​ៗ​ក្រៅ​ពី instance ។ ហើយ​ដោយ constructor ត្រូវ​បាន call នៅ​ពេល​ដែល​ថ្នាក់​ត្រូវ​បាន​យក​ទៅ​ប្រើ ដូចនេះ​ការផ្តល់ argument អោយ​ទៅ constructor ត្រូវ​ធ្វើ​ឡើង​នៅ​ពេល​ដែល​ថ្នាក់​ត្រូវ​យក​ទៅ​ប្រើ ក្នុង​ការបង្កើត​ instance ផ្សេង​ៗ​។

class Area():
    pi = 3.14

    def __init__(self, width, height):
        self.display(width, height)

    def rectangle(self, width, height):
        area = width * height
        return area

    def display(self, width, height):
        print('pi is', Area.pi)
        print('The area of the rectangle is', self.rectangle(width, height))

instance = Area(25, 5)
pi is 3.14
The area of the rectangle is 125