पाइथन में स्थिर विधियों का उपयोग कब और कैसे किया जाता है? जब हम संभव हो तो ऑब्जेक्ट का उदाहरण बनाने के लिए कारखाने विधि के रूप में एक क्लास विधि का उपयोग कर पहले ही स्थापित कर चुके हैं। दूसरे शब्दों में, क्लास विधियों को वैकल्पिक कन्स्ट्रक्टर के रूप में उपयोग करना सबसे अच्छा अभ्यास नहीं है (Factory method for python object - best practice देखें)।पायथन में स्थिर तरीकों का उपयोग करना - सर्वोत्तम अभ्यास
आइए कहें कि मेरे पास डेटाबेस में कुछ इकाई डेटा का प्रतिनिधित्व करने के लिए उपयोग की जाने वाली कक्षा है। कल्पना करें कि डेटा dict
ऑब्जेक्ट है जिसमें फील्ड नाम और फ़ील्ड मान हैं और फ़ील्ड में से एक आईडी आईडी है जो डेटा को अद्वितीय बनाती है।
class Entity(object):
def __init__(self, data, db_connection):
self._data = data
self._db_connection
यहाँ मेरी __init__
विधि इकाई डेटा dict
वस्तु लेता है। आइए कहें कि मेरे पास केवल एक आईडी नंबर है और मैं Entity
उदाहरण बनाना चाहता हूं। सबसे पहले मुझे शेष डेटा ढूंढना होगा, फिर मेरे Entity
ऑब्जेक्ट का एक उदाहरण बनाएं। मेरे पिछले प्रश्न से, हमने पाया कि फैक्ट्री विधि के रूप में एक क्लास विधि का उपयोग संभवतः संभवतः टाला जाना चाहिए।
class Entity(object):
@classmethod
def from_id(cls, id_number, db_connection):
filters = [['id', 'is', id_number]]
data = db_connection.find(filters)
return cls(data, db_connection)
def __init__(self, data, db_connection):
self._data = data
self._db_connection
# Create entity
entity = Entity.from_id(id_number, db_connection)
ऊपर क्या नहीं करना है या अगर कोई एक विकल्प है कम से कम क्या नहीं करना है का एक उदाहरण है। अब मैं सोच रहा हूं कि मेरी कक्षा विधि को संपादित करना है ताकि यह एक उपयोगिता विधि से अधिक हो और फैक्ट्री विधि से कम एक वैध समाधान हो। दूसरे शब्दों में, निम्न उदाहरण स्थिर तरीकों का उपयोग करने के लिए सर्वोत्तम अभ्यास का अनुपालन करता है।
class Entity(object):
@staticmethod
def data_from_id(id_number, db_connection):
filters = [['id', 'is', id_number]]
data = db_connection.find(filters)
return data
# Create entity
data = Entity.data_from_id(id_number, db_connection)
entity = Entity(data)
या आईडी आईडी से इकाई डेटा खोजने के लिए एक स्टैंडअलोन फ़ंक्शन का उपयोग करने के लिए और अधिक समझदारी होती है।
def find_data_from_id(id_number, db_connection):
filters = [['id', 'is', id_number]]
data = db_connection.find(filters)
return data
# Create entity.
data = find_data_from_id(id_number, db_connection)
entity = Entity(data, db_connection)
नोट: मैं अपने __init__
प्रक्रिया में परिवर्तन करना नहीं चाहता। पहले लोगों ने इस __init__(self, data=None, id_number=None)
की तरह कुछ देखने के लिए मेरी __init__
विधि बनाने का सुझाव दिया है लेकिन इकाई डेटा खोजने के 101 अलग-अलग तरीके हो सकते हैं, इसलिए मैं उस तर्क को कुछ हद तक अलग रखना पसंद करूंगा। सही बात?
इस प्रश्न का नाम और प्रारंभिक वाक्य यह ध्वनि बनाता है जैसे आप चाहते हैं कि कोड लिखने का सही तरीका जानने के बजाय भाषा सुविधाओं का उपयोग करने के कारणों के लिए खुदाई कर रहे हों। मैं यह नहीं कह रहा हूं कि आप क्या कर रहे हैं (आपके प्रश्न का वास्तविक निकाय निश्चित रूप से वास्तविक, वैध प्रश्न है)। बस आपको अपने वाक्यांश के बारे में थोड़ा सोचना चाहिए। इस तरह, आप केवल उन लोगों से जवाब प्राप्त कर सकते हैं जो अच्छी पाइथन लिखने वाले लोगों के बड़े पूल की बजाय भाषा सुविधाओं पर बहस करना पसंद करते हैं। – abarnert