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