শুরুতে একক আন্ডারস্কোর:
পাইথনের আসল ব্যক্তিগত পদ্ধতি নেই। পরিবর্তে, কোনও পদ্ধতি বা গুণবাচক নামের শুরুতে একটি আন্ডারস্কোর বলতে বোঝায় যে আপনার এই পদ্ধতিটি অ্যাক্সেস করা উচিত নয়, কারণ এটি API এর অংশ নয়।
class BaseForm(StrAndUnicode):
def _get_errors(self):
"Returns an ErrorDict for the data provided for the form"
if self._errors is None:
self.full_clean()
return self._errors
errors = property(_get_errors)
(এই কোড স্নিপেটটি জাঙ্গো উত্স কোড থেকে নেওয়া হয়েছিল: জ্যাঞ্জো / ফর্ম / ফর্ম.পি)। এই errors
কোডটিতে, একটি সর্বজনীন সম্পত্তি, তবে এই সম্পত্তিটি, _get_erferences কে যে পদ্ধতিটি বলে, সেটি "ব্যক্তিগত", সুতরাং আপনার এটি অ্যাক্সেস করা উচিত নয়।
শুরুতে দুটি আন্ডারস্কোর:
এটি প্রচুর বিভ্রান্তির সৃষ্টি করে। এটি কোনও ব্যক্তিগত পদ্ধতি তৈরি করতে ব্যবহার করা উচিত নয়। আপনার পদ্ধতিটি একটি সাবক্লাস দ্বারা ওভাররাইড হওয়া বা দুর্ঘটনাক্রমে অ্যাক্সেস হওয়া এড়ানোর জন্য ব্যবহার করা উচিত। আসুন একটি উদাহরণ দেখুন:
class A(object):
def __test(self):
print "I'm a test method in class A"
def test(self):
self.__test()
a = A()
a.test()
# a.__test() # This fails with an AttributeError
a._A__test() # Works! We can access the mangled name directly!
আউটপুট:
$ python test.py
I'm test method in class A
I'm test method in class A
এখন একটি সাবক্লাস বি তৈরি করুন এবং __তম পদ্ধতির জন্য কাস্টমাইজেশন করুন
class B(A):
def __test(self):
print "I'm test method in class B"
b = B()
b.test()
আউটপুট হবে ....
$ python test.py
I'm test method in class A
যেমনটি আমরা দেখেছি, এস্টেস্ট () বি .__ পরীক্ষা () পদ্ধতিগুলি কল করেনি, যেমনটি আমরা আশা করতে পারি। তবে বাস্তবে, এটি __ এর জন্য সঠিক আচরণ। __Est () নামক দুটি পদ্ধতির স্বয়ংক্রিয়ভাবে নাম পরিবর্তিত হয়ে (মাংলড) _ এ_এস্টেস্ট () এবং _ বি__েস্ট () করা হয়েছে, সুতরাং এগুলি দুর্ঘটনাক্রমে ওভাররাইড হয় না। আপনি যখন __ দিয়ে শুরু করে কোনও পদ্ধতি তৈরি করেন তার অর্থ হ'ল আপনি কারও কাছে এটি ওভাররাইড করতে সক্ষম হতে চান না এবং আপনি কেবল নিজের শ্রেণীর অভ্যন্তর থেকে এটিকে অ্যাক্সেস করতে চান।
শুরুতে এবং শেষে দুটি আন্ডারস্কোর:
আমরা যখন কোনও পদ্ধতি দেখি তখন __this__
এটিকে কল করি না। এটি এমন একটি পদ্ধতি যা অজগরকে কল করার জন্য বোঝানো হয়, আপনি নয়। এর কটাক্ষপাত করা যাক:
>>> name = "test string"
>>> name.__len__()
11
>>> len(name)
11
>>> number = 10
>>> number.__add__(40)
50
>>> number + 50
60
সর্বদা কোনও অপারেটর বা নেটিভ ফাংশন থাকে যা এই যাদু পদ্ধতিগুলিকে কল করে। কখনও কখনও এটি নির্দিষ্ট পরিস্থিতিতে কেবল একটি হুক অজগর কল। উদাহরণস্বরূপ __init__()
যখন অবজেক্টটি তৈরি করা __new__()
হয় তখন উদাহরণটি তৈরি করার জন্য ডাকা হয় ...
একটি উদাহরণ নেওয়া যাক ...
class FalseCalculator(object):
def __init__(self, number):
self.number = number
def __add__(self, number):
return self.number - number
def __sub__(self, number):
return self.number + number
number = FalseCalculator(20)
print number + 10 # 10
print number - 20 # 40
আরও তথ্যের জন্য, পিইপি -8 গাইড দেখুন । আরও যাদু পদ্ধতির জন্য এই পিডিএফটি দেখুন ।