Staticmethod () अंतर्निहित फ़ंक्शन किसी दिए गए फ़ंक्शन के लिए एक स्थिर विधि देता है।
का सिंटैक्स staticmethod()
है:
स्टेटमिथोड (कार्य)
का उपयोग करते हुए staticmethod()
एक स्थिर समारोह बनाने का एक संयुक्त राष्ट्र के Pythonic तरीका माना जाता है।
इसलिए, पायथन के नए संस्करणों में, आप @staticmethod
डेकोरेटर का उपयोग कर सकते हैं ।
का सिंटैक्स @staticmethod
है:
@staticmethod def func (args,…)
स्टेटमिथोड () पैरामीटर
staticmethod()
विधि एक एकल पैरामीटर लेता है:
- फ़ंक्शन - फ़ंक्शन जिसे स्थिर विधि में परिवर्तित करने की आवश्यकता है
Staticmethod से वापसी मान ()
staticmethod()
रिटर्न एक समारोह के लिए एक स्थिर विधि पैरामीटर के रूप में पारित कर दिया।
एक स्थिर विधि क्या है?
स्टैटिक विधियाँ, क्लास के तरीकों की तरह, ऐसी विधियाँ हैं जो अपनी वस्तु के बजाय एक कक्षा से जुड़ी होती हैं।
उन्हें वर्ग उदाहरण निर्माण की आवश्यकता नहीं है। तो, वे वस्तु की स्थिति पर निर्भर नहीं हैं।
स्थैतिक विधि और वर्ग विधि के बीच का अंतर है:
- स्टैटिक विधि कक्षा के बारे में कुछ नहीं जानती है और बस मापदंडों से संबंधित है।
- क्लास विधि कक्षा के साथ काम करती है क्योंकि इसका पैरामीटर हमेशा क्लास ही होता है।
उन्हें वर्ग और उसकी वस्तु दोनों के द्वारा कहा जा सकता है।
Class.staticmethodFunc () या यहां तक कि क्लास ()। staticmethodFunc ()
उदाहरण 1: staticmethod () का उपयोग करके एक स्थिर विधि बनाएँ
class Mathematics: def addNumbers(x, y): return x + y # create addNumbers static method Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('The sum is:', Mathematics.addNumbers(5, 10))
आउटपुट
योग है: 15
आप स्थैतिक तरीकों का उपयोग कब करते हैं?
1. एक वर्ग के लिए उपयोगिता कार्य समूह
स्टैटिक विधियों का सीमित उपयोग मामला है क्योंकि, क्लास के तरीकों या क्लास के किसी भी अन्य तरीकों की तरह, वे क्लास के गुणों तक नहीं पहुँच सकते हैं।
हालाँकि, जब आपको एक उपयोगिता फ़ंक्शन की आवश्यकता होती है जो किसी वर्ग के किसी भी गुण तक नहीं पहुंचता है, लेकिन यह समझ में आता है कि यह वर्ग का है, तो हम स्थैतिक कार्यों का उपयोग करते हैं।
उदाहरण 2: एक स्थिर विधि के रूप में एक उपयोगिता फ़ंक्शन बनाएँ
class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") date = Dates("15-12-2016") dateFromDB = "15/12/2016" dateWithDash = Dates.toDashDate(dateFromDB) if(date.getDate() == dateWithDash): print("Equal") else: print("Unequal")
आउटपुट
बराबरी का
यहां, हमारे पास एक Dates
वर्ग है जो केवल डैश के साथ तारीखों के साथ काम करता है। हालांकि, हमारे पिछले डेटाबेस में, सभी तिथियां स्लैश में मौजूद थीं।
आदेश चित्तीदार तिथियों के लिए स्लेश दिनांकों को परिवर्तित करने के लिए हम एक उपयोगिता समारोह बनाया है toDashDate
के भीतर Dates
।
यह एक स्थिर विधि है क्योंकि इसे Dates
स्वयं के किसी भी गुण तक पहुँचने की आवश्यकता नहीं है और केवल मापदंडों की आवश्यकता है।
हम toDashDate
कक्षा के बाहर भी बना सकते हैं , लेकिन चूंकि यह केवल तिथियों के लिए काम करता है, इसलिए इसे Dates
कक्षा के अंदर रखना तर्कसंगत है ।
2. एकल कार्यान्वयन
जब हम किसी वर्ग परिवर्तन के उपवर्ग नहीं चाहते हैं तो स्थैतिक विधियों का उपयोग किया जाता है।
उदाहरण 3: स्थैतिक विधि के साथ वंशानुक्रम कैसे काम करता है?
class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") class DatesWithSlashes(Dates): def getDate(self): return Dates.toDashDate(self.date) date = Dates("15-12-2016") dateFromDB = DatesWithSlashes("15/12/2016") if(date.getDate() == dateFromDB.getDate()): print("Equal") else: print("Unequal")
आउटपुट
बराबरी का
यहां, हम यह नहीं चाहेंगे कि उपवर्ग DatesWithSlashes
स्थैतिक उपयोगिता पद्धति को ओवरराइड करे toDashDate
क्योंकि इसमें केवल एक ही उपयोग होता है, यानी डैश-डेट्स में परिवर्तन की तारीख।
हम आसानी getDate()
से उपवर्ग में विधि को ओवरराइड करके अपने लाभ के लिए स्थैतिक विधि का उपयोग कर सकते हैं ताकि यह DatesWithSlashes
कक्षा के साथ अच्छी तरह से काम करे ।