যদিও গৃহীত অ্যানওয়ারটি স্পট রয়েছে, তবে আমি কিছুটা বর্ণনা যুক্ত করতে চাই।
একটি ছোট অনুশীলন করা যাক
প্রথমে নিম্নরূপ কোনও শ্রেণি সংজ্ঞায়িত করুন:
class A:
temp = 'Skyharbor'
def __init__(self, x):
self.x = x
def change(self, y):
self.temp = y
তাই আমরা এখানে কি আছে?
- আমাদের একটি খুব সাধারণ বর্গ রয়েছে যার একটি বৈশিষ্ট্য রয়েছে
temp
যা একটি স্ট্রিং
- একটি
__init__
পদ্ধতি যা সেট করেself.x
- একটি পরিবর্তন পদ্ধতি সেট
self.temp
খুব সোজা এগিয়ে এতদুর হাঁ? এবার এই ক্লাসটি নিয়ে চারপাশে খেলা শুরু করা যাক। প্রথমে এই ক্লাসটি শুরু করি:
a = A('Tesseract')
এখন নিম্নলিখিতগুলি করুন:
>>> print(a.temp)
Skyharbor
>>> print(A.temp)
Skyharbor
ঠিক আছে, a.temp
প্রত্যাশার মতো কাজ করেছেন কিন্তু কীভাবে A.temp
কাজ করলেন? ভাল এটি কাজ করেছে কারণ টেম্প একটি শ্রেণি বৈশিষ্ট্য। পাইথনের সমস্ত কিছুই একটি বস্তু। এখানে এও বর্গের একটি বিষয় type
। সুতরাং অ্যাট্রিবিউট টেম্প একটি A
শ্রেণীর দ্বারা অনুষ্ঠিত একটি বৈশিষ্ট্য এবং আপনি যদি টেম্পের মান পরিবর্তন করেন A
(এবং কোনও উদাহরণের মাধ্যমে নয় a
), পরিবর্তিত মানটি A
শ্রেণীর সমস্ত ক্ষেত্রে প্রতিফলিত হতে চলেছে । আসুন এগিয়ে যান এবং এটি করা:
>>> A.temp = 'Monuments'
>>> print(A.temp)
Monuments
>>> print(a.temp)
Monuments
আকর্ষণীয় তাই না? এবং এটি দ্রষ্টব্য id(a.temp)
এবং id(A.temp)
এখনও একই ।
যে কোনও পাইথন অবজেক্টকে স্বয়ংক্রিয়ভাবে একটি __dict__
অ্যাট্রিবিউট দেওয়া হয় , এতে তার বৈশিষ্ট্যের তালিকা থাকে। আসুন অনুসন্ধান করুন যে এই অভিধানটি আমাদের উদাহরণস্বরূপ বস্তুর জন্য কী রয়েছে:
>>> print(A.__dict__)
{
'change': <function change at 0x7f5e26fee6e0>,
'__module__': '__main__',
'__init__': <function __init__ at 0x7f5e26fee668>,
'temp': 'Monuments',
'__doc__': None
}
>>> print(a.__dict__)
{x: 'Tesseract'}
নোট করুন যে temp
বৈশিষ্ট্যটি A
শ্রেণীর বৈশিষ্ট্যগুলির মধ্যে তালিকাভুক্ত থাকে যখন x
উদাহরণের জন্য তালিকাভুক্ত থাকে।
সুতরাং কীভাবে আসুন আমরা a.temp
উদাহরণস্বরূপ তালিকাভুক্ত না হলে এটির একটি নির্ধারিত মান পাই a
। ওয়েল যে __getattribute__()
পদ্ধতির ম্যাজিক । পাইথনে ডটেড সিনট্যাক্স স্বয়ংক্রিয়ভাবে এই পদ্ধতিটি ডাকে তাই আমরা যখন লিখি তখন a.temp
পাইথন কার্যকর করে a.__getattribute__('temp')
। এই পদ্ধতিটি অ্যাট্রিবিউট লুকিং ক্রিয়া সম্পাদন করে, অর্থাত্ বিভিন্ন জায়গায় অনুসন্ধান করে গুণকের মান খুঁজে বের করে।
স্ট্যান্ডার্ড প্রয়োগকরণ __getattribute__()
প্রথমে কোনও সামগ্রীর অভ্যন্তরীণ অভিধান ( ডিক্ট ) অনুসন্ধান করে তারপরে বস্তুর ধরণটি। এই ক্ষেত্রে a.__getattribute__('temp')
প্রথমে a.__dict__['temp']
এবং তারপরে মৃত্যুদন্ড কার্যকর করা হয়a.__class__.__dict__['temp']
ঠিক আছে এখন আমাদের change
পদ্ধতিটি ব্যবহার করা যাক :
>>> a.change('Intervals')
>>> print(a.temp)
Intervals
>>> print(A.temp)
Monuments
ভাল এখন যে আমরা ব্যবহার করেছি self
, print(a.temp)
আমাদের থেকে আলাদা মান দেয় print(A.temp)
।
এখন যদি আমরা তুলনা করি id(a.temp)
এবং id(A.temp)
, তারা আলাদা হবে।
list
কোনও গুনের নাম হিসাবে ব্যবহার করবেন না ।list
একটি নতুন তালিকা তৈরি করতে একটি বিল্ট ইন ফাংশন। আপনার মূল অক্ষরের সাথে নামের ক্লাসগুলি লিখতে হবে।