យើងបានដឹងរួចមកហើយថា ការ 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)