मैं कक्षा विशेष विधि को कैसे ओवरराइड कर सकता हूं?पायथन ओवरराइडिंग क्लास (उदाहरण नहीं) विशेष तरीके
मैं उदाहरण के बिना कक्षा के __str__()
विधि को कॉल करने में सक्षम होना चाहता हूं। उदाहरण:
class Foo:
def __str__(self):
return 'Bar'
class StaticFoo:
@staticmethod
def __str__():
return 'StaticBar'
class ClassFoo:
@classmethod
def __str__(cls):
return 'ClassBar'
if __name__ == '__main__':
print(Foo)
print(Foo())
print(StaticFoo)
print(StaticFoo())
print(ClassFoo)
print(ClassFoo())
पैदा करता है:
<class '__main__.Foo'>
Bar
<class '__main__.StaticFoo'>
StaticBar
<class '__main__.ClassFoo'>
ClassBar
होना चाहिए:
Bar
Bar
StaticBar
StaticBar
ClassBar
ClassBar
यहां तक कि अगर मैं @staticmethod
या @classmethod
__str__
अभी भी उपयोग कर रहा है का उपयोग करने के लिए अंतर्निहित अजगर परिभाषा __str__
। यह केवल तभी काम कर रहा है जब Foo().__str__()
Foo.__str__()
के बजाय।
-1: "उदाहरण बनाकर बिना' __str __() 'वर्ग की विधि कहते हैं"। किसी भी वस्तु के बारे में हर समझ को तोड़ता है। कृपया ऐसा मत करो। यह कार्यक्रम पूरी तरह से हमारी सबसे मौलिक उम्मीदों का उल्लंघन करता है। –
मैं असहमत हूं। यदि आप str (MyClass) को कॉल करते हैं तो ऐसा कोई कारण नहीं है कि आप इसे व्यवहार करने की अपेक्षा करें जैसे कि आपको str (myClassObject) कहा जाता है। यही है, शुरू करने के लिए कोई मौलिक उम्मीद नहीं है। मुझे संदेह है कि वह एक स्थिर वर्ग बनाना चाहता है और इसका कोई भी उदाहरण बनाने का इरादा नहीं रखता है। –