সমস্ত ভাল উদাহরণের মতো, আপনি আসলে যা করার চেষ্টা করছেন তা আপনি সরল করেছেন। এটি ভাল, তবে এটি লক্ষণীয় যে ক্লাস বনাম উদাহরণের ভেরিয়েবলগুলির ক্ষেত্রে অজগরটিতে অনেক নমনীয়তা থাকে। একই পদ্ধতি সম্পর্কে বলা যেতে পারে। সম্ভাবনার একটি ভাল তালিকার জন্য, আমি মাইকেল ফেস্টের নতুন ধাঁচের ক্লাসের ভূমিকা , বিশেষত বিভাগ 2 থেকে 6 এর মধ্যে পড়ার পরামর্শ দিই ।
একটি জিনিস যা শুরু করার সময় মনে রাখতে প্রচুর কাজ নেয় তা হ'ল অজগর জাভা নয়। একটি ক্লিচের চেয়েও বেশি কিছু। জাভাতে, একটি সম্পূর্ণ শ্রেণিটি সঙ্কলিত হয়, যা নেমস্পেসের রেজোলিউশনটিকে বাস্তবের সহজ করে তোলে: কোনও পদ্ধতির (যে কোনও জায়গায়) বাইরে ঘোষিত যে কোনও ভেরিয়েবলগুলি হ'ল উদাহরণ (বা, যদি স্থির, শ্রেণি) ভেরিয়েবল হয় এবং পদ্ধতিগুলির মধ্যে সুস্পষ্টভাবে অ্যাক্সেসযোগ্য হয়।
অজগর সহ, থাম্বের দুর্দান্ত নিয়মটি হল যে তিনটি নেমস্পেসগুলি ক্রম অনুসারে, ভেরিয়েবলগুলির জন্য অনুসন্ধান করা হয়:
- ফাংশন / পদ্ধতি
- বর্তমান মডিউল
- Builtins
{begin pedagogy}
এর সীমাবদ্ধ ব্যতিক্রম রয়েছে। আমার সাথে প্রধান যেটি ঘটে তা হ'ল, যখন কোনও শ্রেণি সংজ্ঞা লোড করা হয়, শ্রেণি সংজ্ঞাটি তার নিজস্ব অন্তর্নিহিত নামস্থান। তবে এটি কেবল মডিউলটি লোড হচ্ছে এবং যতক্ষণ না কোনও পদ্ধতির মধ্যে পুরোপুরি বাইপাস করা যায়। এভাবে:
>>> class A(object):
foo = 'foo'
bar = foo
>>> A.foo
'foo'
>>> A.bar
'foo'
কিন্তু:
>>> class B(object):
foo = 'foo'
def get_foo():
return foo
bar = get_foo()
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
class B(object):
File "<pyshell#11>", line 5, in B
bar = get_foo()
File "<pyshell#11>", line 4, in get_foo
return foo
NameError: global name 'foo' is not defined
{end pedagogy}
শেষ পর্যন্ত, মনে রাখা জিনিস যে তুমি কি ভেরিয়েবল আপনি অ্যাক্সেস করতে চান কোনো একটিতে অ্যাক্সেস আছে, কিন্তু সম্ভবত পরোক্ষভাবে না। যদি আপনার লক্ষ্যগুলি সহজ এবং সোজা হয়, তবে Foo.bar বা স্ব.বারের জন্য যাওয়া সম্ভবত যথেষ্ট হবে। যদি আপনার উদাহরণটি আরও জটিল হয়ে উঠছে, বা আপনি উত্তরাধিকারের মতো অভিনব জিনিসগুলি করতে চান (আপনি স্থির / শ্রেণির পদ্ধতিগুলি উত্তরাধিকারী করতে পারেন!), বা ক্লাসের মধ্যেই আপনার শ্রেণীর নাম উল্লেখ করার ধারণাটি আপনার কাছে ভুল বলে মনে হচ্ছে, দেখুন ভূমিকা আমি সংযুক্ত।