मैं इस सवाल का जवाब देख रहा था: Is it possible to define a class constant inside an Enum?पायथन: लगातार क्लास
एतान फर्मन के जवाब में क्या दिलचस्पी मुझे लगातार वर्ग सबसे था।
class Constant:
def __init__(self, value):
self.value = value
def __get__(self, *args):
return self.value
def __repr__(self):
return '%s(%r)' % (self.__class__.__name__, self.value)
प्रश्न पायथन 3.4 के बारे में था लेकिन मैं 2.7 का उपयोग कर रहा हूं। जवाब में एतान तो जैसे वर्ग ग्रह का एक उदाहरण चर के रूप में गुरुत्वाकर्षण स्थिरांक सेट:
G = Constant(6.67300E-11)
2,7 में इस वर्ग की मेरे परीक्षण से पता चलता है कि टाइपिंग बस जी मुझे इस देता है:
Out[49]: Constant(3)
(परीक्षण के दौरान मैंने इसे आसानी से उपयोग करने के लिए 3 पर सेट किया है। यह मुझे __repr__
आउटपुट जैसा दिखता है, अगर मैं गलत हूं तो कृपया मुझे सही करें।
मूल्य G.value के माध्यम से उपलब्ध है। हालांकि, एथन के जवाब में वह
का उपयोग करता हैreturn self.G * self.mass/(self.radius * self.radius)
यह स्पष्ट रूप से केवल तभी काम करता है जब मान __repr__
आउटपुट बनाम लौटाया जाता है। अब अगर मैं class Constant:
से class Constant(int):
बदलता हूं तो जी टाइप करें मुझे अभी भी __repr__
आउटपुट मिलता है लेकिन यदि मैं G * 4
टाइप करता हूं तो मुझे 12
त्रुटि मिलती है जो मुझे मिल रही थी। (TypeError: *: 'instance' और 'int' के लिए असमर्थित ऑपरेंड प्रकार (0)
तो स्पष्ट रूप से कुछ ऑब्जेक्ट की तरह कुछ स्पष्ट रूप से कॉल किया जा सकता है। क्या कोई जादू विधि है जो मुझे याद आ रही है जो मुझे कॉन्स्टेंट क्लास के लिए ऐसा करने की अनुमति देगी? चूंकि स्थिरांक तार, पूर्णांक या फ्लोट हो सकते हैं, इसलिए मैं 1 वर्ग रखना पसंद करूंगा जो उन सभी वस्तुओं को बढ़ाकर 3 अलग-अलग वर्गों को संभालता है।
मूल्य G.value के माध्यम से भी सेटटेबल है। क्या मैं इसे बंद कर सकता हूं ताकि कॉन्स्टेंट क्लास व्यवहार को वास्तविक स्थिरता पसंद कर सके? (मुझे संदेह है कि उत्तर नहीं है।)
आप इसे स्थिर क्यों रखना चाहते हैं? – Veedrac
@Veedrac मैं कॉन्स्टेंट क्यों नहीं चाहूंगा? या केवल कक्षा के भीतर मूल्यों को पढ़ा? पायथन पर पढ़ने से, मैं समझता हूं कि यह पाइथन के "हम सब वयस्कों की सहमति कर रहे हैं" दर्शन का मुकाबला है। मुझे अब तक पाइथन पसंद है लेकिन मुझे लगता है कि दर्शन एक निरीक्षण है। मैं अपने लिए, खुद, और मैं प्रोग्राम - कोई और इसे पढ़ नहीं पाएगा या इसका उपयोग संभवतः करेगा। पिछले 15 वर्षों से कई भाषाओं में कोडिंग करने के बाद मैंने कुछ चीजें सीखी हैं। उन चीजों में से एक यह है कि मैं केवल कक्षा को डिजाइन करके डेबगिंग के दिनों को रोक सकता हूं जहां कुछ चीजें सिर्फ उस वर्ग के आंतरिक लोगों के बाहर नहीं बदला जा सकता है। –
मैं और अधिक सोच रहा था कि आपको किस स्तर पर निरंतर रहने की आवश्यकता है; मेरा मुद्दा यह जांचना था कि क्या आप "सार्वजनिक इंटरफेस के माध्यम से निरंतर" के साथ ठीक थे, जो ऐसा करने का सही तरीका है, या आप वास्तव में इसे * पूरी तरह से * निरंतर होना चाहते हैं, जो असंभव है। – Veedrac