স্বেচ্ছাচারিত বৈশিষ্ট্য অ্যাসাইনমেন্ট সমর্থন করার জন্য, একটি বস্তুর একটি প্রয়োজন __dict__
: অবজেক্টের সাথে যুক্ত একটি ডিক, যেখানে স্বেচ্ছাসেবী বৈশিষ্ট্যগুলি সংরক্ষণ করা যায়। তা না হলে, কোথাও এর করা নতুন বৈশিষ্ট্যাবলী।
উদাহরণটি একটিটিকে ঘিরে object
রাখে না__dict__
- যদি এটি ঘটে থাকে , ভয়াবহ বিজ্ঞপ্তি নির্ভরতা সমস্যার আগে (যেহেতু dict
, অন্যান্য সমস্ত কিছুর মতো object
;-) থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয় , এটি পাইথনের প্রতিটি বস্তুকে একটি ডিক দিয়ে কাটায়, যার অর্থ ওভারহেড হবে এর অনেক বস্তু যা বর্তমানে নেই বা অভি প্রয়োজন প্রতি বাইট (মূলত, সমস্ত বস্তু আছে না যে ইচ্ছামত হস্তান্তরযোগ্য বৈশিষ্ট্যাবলী হবে না বা অভি প্রয়োজন)।
উদাহরণস্বরূপ, দুর্দান্ত pympler
প্রকল্পটি ব্যবহার করে (আপনি এখান থেকে এসএনএন এর মাধ্যমে এটি পেতে পারেন ), আমরা কিছু পরিমাপ করতে পারি ...:
>>> from pympler import asizeof
>>> asizeof.asizeof({})
144
>>> asizeof.asizeof(23)
16
আপনি চাইবেন না যে প্রত্যেকে int
কেবল ১ 16 এর পরিবর্তে ১৪৪ বাইট তুলবে , তাই না? -)
এখন, আপনি যখন ক্লাস করেন (যা কিছু থেকে উত্তরাধিকারী হয়), জিনিসগুলি পরিবর্তন হয় ...:
>>> class dint(int): pass
...
>>> asizeof.asizeof(dint(23))
184
... __dict__
হয় এখন জোড়া হয়েছে (প্লাস, একটু বেশি ওভারহেড) - তাই একটি dint
উদাহরণ হিসেবে বলা যায় নির্বিচারে বৈশিষ্ট্যাবলী থাকতে পারে, কিন্তু আপনি যে নমনীয়তার জন্য বেশ একটি স্থান খরচ পরিশোধ।
তাহলে আপনি যদি int
কেবল একটি অতিরিক্ত বৈশিষ্ট্যটি চান foobar
...? এটি একটি বিরল প্রয়োজন, তবে পাইথন এই উদ্দেশ্যে একটি বিশেষ প্রক্রিয়া সরবরাহ করে ...
>>> class fint(int):
... __slots__ = 'foobar',
... def __init__(self, x): self.foobar=x+100
...
>>> asizeof.asizeof(fint(23))
80
... না বেশ একটি হিসাবে ছোট হিসাবে int
, আপনি মন! (বা এমনকি দুটি int
গুলি, একটি self
এবং একটি self.foobar
- দ্বিতীয়টি পুনরায় নিয়োগ দেওয়া যেতে পারে), তবে অবশ্যই এ এর চেয়ে অনেক ভাল dint
।
শ্রেণিতে যখন __slots__
বিশেষ বৈশিষ্ট্য (স্ট্রিংগুলির ক্রম) থাকে, তখন class
বিবৃতি (আরও সুনির্দিষ্টভাবে, ডিফল্ট মেটাকগ্লাস type
) শ্রেণীর প্রতিটি উদাহরণকে (এবং সেইসাথে স্বেচ্ছাচারিত বৈশিষ্ট্যগুলি রাখার ক্ষমতা) দিয়ে সজ্জিত করে না__dict__
, কেবল একটি সীমাবদ্ধ , "স্লট" এর অনমনীয় সেট (মূলত এমন জায়গাগুলি যা প্রত্যেকে কোনও কোনও বিষয়ের একটি রেফারেন্স ধরে রাখতে পারে) প্রদত্ত নামের সাথে।
হারানো নমনীয়তার বিনিময়ে, আপনি উদাহরণস্বরূপ প্রচুর বাইট অর্জন করেন (সম্ভবত আপনার যদি অর্থাত্ লক্ষ লক্ষ ঘটনা উদ্রেক করা হয় তবে এর জন্য ব্যবহারের কেস রয়েছে)।
object
অপরিবর্তনীয় এবং নতুন বৈশিষ্ট্য যুক্ত করা যায় না? এটি সর্বাধিক বোধ করবে বলে মনে হচ্ছে।