क्या मैं पाइथन 2.5.6 में क्लीन पायथन 3 super()
सिंटैक्स का उपयोग कर सकता हूं?
शायद किसी प्रकार के __future__
आयात के साथ?क्या मैं पाइथन 2.5.6 में पाइथन 3 सुपर() का उपयोग कर सकता हूं?
उत्तर
आप एक नंगे super()
कॉल का उपयोग नहीं कर सकते जिसमें कोई प्रकार/वर्ग नहीं है। न ही आप इसके लिए एक प्रतिस्थापन लागू कर सकते हैं जो काम करेगा। पीईपी देख 3135
नहीं, आप नहीं कर सकते। लेकिन आप पाइथन 3 के super()
पायथन 3 का उपयोग कर सकते हैं।
नोट यह एक भयानक "समाधान" है, मैं इसे केवल के लिए पोस्ट - अजगर 3.x विशेष समर्थन नंगे super()
कॉल सक्षम करना (यह सभी कार्य एक वर्ग के भीतर परिभाषित में एक __class__
सेल चर स्थानों में शामिल है ! घर पर ऐसा नहीं सुनिश्चित करें कि आपने करते
मैं फिर कहता हूँ: इस
एक ऐसा नहीं करते हैं इस mixin
class Super(object):
def super(self):
return super(self.__class__, self)
उपयोग करने के बारे में सोच सकते हैं प्राप्त करने के लिए एक self.super()
:
class A(object, Super):
def __init__(self):
print "A"
class B(A):
def __init__(self):
print "B"
self.super().__init__()
उपज:
>>> a = A()
A
>>> b = B()
B
A
लेकिन सावधान रहना: यह self.super()
है नहीं बराबर super(B, self)
करने के लिए - यदि A
भी self.super().__init__()
कहा जाता है, एक B
के निर्माण के कारण होता है A
कन्स्ट्रक्टर स्वयं को अनिश्चित काल तक कॉल करने के लिए, क्योंकि self.__class__
B
रहेगा । यह की कमी के कारण accepted answer में उल्लिखित है। आप संभावित रूप से एक छिपे हुए राज्य मशीन या एक परिष्कृत मेटाक्लास के साथ इस मुद्दे के आसपास काम कर सकते हैं उदा। self.__class__.mro()
में वास्तविक वर्ग की स्थिति की जांच करता है, लेकिन क्या यह वास्तव में इसके लायक है? शायद नहीं ...
मुझे एहसास है कि यह प्रश्न पुराना है, और उस समय चयनित उत्तर सही हो सकता है, लेकिन यह अब पूरा नहीं हुआ है। तुम अब भी 2.5.6 में super()
उपयोग कर सकते हैं नहीं है, लेकिन python-future
2.6+ के लिए एक back-ported implementation प्रदान करता है:
% pip install future
...
% python
...
>>> import sys
>>> sys.version_info[:3]
(2, 7, 9)
>>> from builtins import *
>>> super
<function newsuper at 0x000000010b4832e0>
>>> super.__module__
'future.builtins.newsuper'
>>> class Foo(object):
... def f(self):
... print('foo')
...
>>> class Bar(Foo):
... def f(self):
... super().f() # <- whoomp, there it is
... print('bar')
...
>>> b = Bar()
>>> b.f()
foo
bar
आप pylint
का उपयोग करते हैं, तो आप टिप्पणी के साथ विरासत चेतावनी निष्क्रिय कर सकते हैं:
# pylint: disable=missing-super-argument
अच्छा एक, धन्यवाद :) –
- 1. क्या पाइथन में सुपर() का उपयोग करना अच्छा विचार है?
- 2. क्या मैं पाइथन जनरेटर को याद कर सकता हूं?
- 3. क्या मैं पाइथन में पॉपन के साथ एक खुली gzip फ़ाइल का उपयोग कर सकता हूं?
- 4. मैं पाइथन में टर्मिनल आउटपुट कैसे प्राप्त कर सकता हूं?
- 5. पाइथन 3
- 6. मैं पाइथन में एकाधिक प्रतिस्थापन कैसे कर सकता हूं?
- 7. ओपनऑफिस 3 में पाइथन 3
- 8. मैं पाइथन में बंदरगाह कैसे कर सकता हूं?
- 9. पाइथन 3
- 10. पाइथन 3
- 11. क्या मैं पाइथन सूची पर "दृश्य" बना सकता हूं?
- 12. क्या मैं पाइथन 2.6 से पायथन 2.7 सबप्रोसेस मॉड्यूल का उपयोग कर सकता हूं?
- 13. क्या मैं पाइथन को विस्तारित करते समय सी ++ सुविधाओं का उपयोग कर सकता हूं?
- 14. पाइथन 3
- 15. मैं पाइथन में MATLAB से अद्वितीय (ए, 'पंक्तियां') का उपयोग कैसे कर सकता हूं?
- 16. मैं पाइथन में 3 डी हिस्टोग्राम कैसे प्रस्तुत कर सकता हूं?
- 17. पाइथन 3
- 18. मैं पाइथन में सामान्य कोड का उपयोग कैसे कर सकता हूं?
- 19. अगर मैं पहले से ही पाइथन 3 जानता हूं तो मैं पाइथन 2 कैसे सीखूं?
- 20. मैं पाइथन में हैशैप से हिस्टोग्राम कैसे बना सकता हूं?
- 21. क्या कोई पाइथन 3 के साथ क्लटर का उपयोग कर सकता है?
- 22. मैं पाइथन आयात को कैसे ट्रैक कर सकता हूं
- 23. मैं पाइथन
- 24. क्या मैं पाइथन में एक आंतरिक फ़ंक्शन का परीक्षण कर सकता हूं?
- 25. पाइथन 3 और लिनक्स
- 26. मैं पाइथन धागे को कैसे थ्रोटल कर सकता हूं?
- 27. मैं पाइथन Argparse उपयोग
- 28. मैं पाइथन
- 29. सॉकेट संसाधन पाइथन 3
- 30. क्या मैं पाइथन में अपने संख्यात्मक मान से पाठ को सॉर्ट कर सकता हूं?
धन्यवाद। मैं उलझन में था क्योंकि इस पीईपी के पहले संस्करण ने कहा था कि आप इसे '__future__ आयात new_super' से आयात करेंगे जो काम नहीं करता है। –