में परिवर्तित नहीं होता है यह this question about floats जैसा ही समस्या है।"{0: d}" के साथ स्ट्रिंग स्वरूपण पूर्णांक
जब आपके पास एक मान प्राप्त होता है जो एक पूर्णांक में परिवर्तित हो सकता है, तो पुराने %d
इसे परिवर्तित कर देगा, लेकिन प्रारूप नहीं है।
class MyIntegerTenClass:
def __int__(self):
return 10
def __str__(self):
return 'ten'
ten = MyIntegerTenClass()
print '%d, %02X, %s' % (ten, ten, ten) # ok
print '{0}'.format(ten) # ok
print '{0:d}, {0:02X}'.format(ten) # ValueError: Unknown format code 'd' for object of type 'str'
वहाँ (उस वर्ग के लिए एक __format__
विधि जोड़ने के बिना) मूल्य प्रारूप तैयार किया जाता के वर्ग को छुए बिना, प्रारूप के व्यवहार को संशोधित करने के लिए एक तरीका है?
संपादित करें: मेरा लक्ष्य स्वरूपण स्ट्रिंग पर स्वरूपण प्राप्त करना है, लेकिन मूल्य पर नहीं। तो यदि प्रारूप स्ट्रिंग "डी" या "एक्स" कहती है, तो मान को int में परिवर्तित करें और फिर दशमलव या हेक्साडेसिमल प्रतिनिधित्व में कनवर्ट करें। यदि प्रारूप स्ट्रिंग "एस" कहती है, तो इसे स्ट्रिंग में सीधे रूपांतरित करें। पुराने %
ने किया था।
दरअसल, मैं मूल्य के वर्ग में __format__
विधि भी जोड़ सकता हूं। लेकिन मैं उस विधि में कैसे जांचूं, अगर दिया गया प्रारूप विनिर्देश एक पूर्णांक प्रारूप विनिर्देश है? बिल्टिन प्रारूप के प्रारूप विनिर्देश पार्सर को पुन: कार्यान्वित किए बिना।
संपादित करें: यहां __format__
और अपवादों के साथ एक समाधान है। कोई बेहतर विचार?
class MyIntegerTenClass:
def __int__(self):
return 10
def __str__(self):
return 'ten'
def __format__(self, spec):
fmt = '{0:%s}'%spec
try:
return fmt.format(str(self))
except:
return fmt.format(int(self))
ten = MyIntegerTenClass()
print '%d, %02X, %s' % (ten, ten, ten) # ok, prints "10, 0A, ten"
print '{0:d}, {0:02X}, {0}'.format(ten) # ok, prints "10, 0A, ten"
यह कहता है कि दस एक स्ट्रिंग है, आप इसे एक संख्या के रूप में प्रारूपित करने की कोशिश कर रहे हैं। –