यह एक वर्ग का उदाहरण बनाने या पाइथन का उपयोग करके उसी डेटा के विभिन्न रूपों से टाइप करने के लिए सबसे अच्छा अभ्यास है। क्या क्लास विधि का उपयोग करना बेहतर है या क्या एक अलग फ़ंक्शन का उपयोग करना बेहतर है? आइए कहें कि मेरे पास एक वर्ग के आकार का वर्णन करने के लिए उपयोग की जाने वाली कक्षा है। (नोट: यह बस एक उदाहरण है मैं कक्षा का एक उदाहरण नहीं एक दस्तावेज़ के आकार का वर्णन करने का सबसे अच्छा तरीका बनाने के लिए सबसे अच्छा तरीका जानना चाहते हैं।।)पाइथन ऑब्जेक्ट के लिए फैक्टरी विधि - सर्वोत्तम अभ्यास
class Size(object):
"""
Utility object used to describe the size of a document.
"""
BYTE = 8
KILO = 1024
def __init__(self, bits):
self._bits = bits
@property
def bits(self):
return float(self._bits)
@property
def bytes(self):
return self.bits/self.BYTE
@property
def kilobits(self):
return self.bits/self.KILO
@property
def kilobytes(self):
return self.bytes/self.KILO
@property
def megabits(self):
return self.kilobits/self.KILO
@property
def megabytes(self):
return self.kilobytes/self.KILO
मेरे __init__
विधि एक आकार मूल्य लेता है बिट्स में प्रतिनिधित्व (बिट्स और केवल बिट्स और मैं इसे इस तरह रखना चाहता हूं) लेकिन मान लें कि मेरे पास बाइट्स में आकार का मूल्य है और मैं अपनी कक्षा का एक उदाहरण बनाना चाहता हूं। क्या क्लास विधि का उपयोग करना बेहतर है या क्या एक अलग फ़ंक्शन का उपयोग करना बेहतर है?
class Size(object):
"""
Utility object used to describe the size of a document.
"""
BYTE = 8
KILO = 1024
@classmethod
def from_bytes(cls, bytes):
bits = bytes * cls.BYTE
return cls(bits)
या
def create_instance_from_bytes(bytes):
bits = bytes * Size.BYTE
return Size(bits)
यह एक मुद्दा तरह लग सकता है नहीं और शायद दोनों उदाहरण मान्य हैं, लेकिन मैं हर बार जब मैं कुछ इस तरह लागू करने की आवश्यकता इसके बारे में सोचो। लंबे समय तक मैंने कक्षा विधि दृष्टिकोण को प्राथमिकता दी है क्योंकि मुझे कक्षा और फैक्ट्री विधि को एक साथ जोड़ने के संगठनात्मक लाभ पसंद हैं। साथ ही, एक वर्ग विधि का उपयोग किसी भी उप-वर्ग के उदाहरण बनाने की क्षमता को संरक्षित करता है, इसलिए यह अधिक ऑब्जेक्ट उन्मुख है। दूसरी तरफ, एक दोस्त ने एक बार कहा था, "जब संदेह होता है, मानक पुस्तकालय क्या करता है" और मुझे मानक लाइब्रेरी में इसका एक उदाहरण अभी तक नहीं मिला है।
कोई भी प्रतिक्रिया बहुत सराहना की है।
चीयर्स
मैं एक सिक्का फ्लिप करना चाहता हूं। अधिकांश पायथन पुस्तकालय प्रक्रियात्मक एपीआई पसंद करते हैं, लेकिन ऐसा इसलिए है क्योंकि वे आपके कोडबेस में आंतरिक पुन: प्रयोज्य कोड से अलग तरीके से उपभोग करने के लिए हैं। – millimoose
पीएस, एक चर 'बाइट्स' कॉल न करें; यह एक बिल्टिन प्रकार है (2.6 और बाद में)। – abarnert
और निश्चित रूप से मुझे एहसास हुआ कि मैंने अपने जवाब में एक ही गलती की है: 'आकार (बाइट्स = 20) '। जैसा मैं करता हूं वैसा मत करो, जैसा कि मैंने कहा है। :) – abarnert