2009-01-14 7 views
5

यह शायद एक सामान्य रूप से पूछे जाने वाले प्रश्न है लेकिन मैं इस पर सहायता के साथ कर सकता हूं। मेरे पास क्लास ऑब्जेक्ट्स की एक सूची है और मैं यह समझने की कोशिश कर रहा हूं कि इसे उस वर्ग से किसी आइटम को प्रिंट करने के बजाय कैसे करना है;पायथन - ऑब्जेक्ट्स की पठनीय सूची

<__main__.evolutions instance at 0x01B8EA08> 

लेकिन कक्षा के किसी चुने हुए ऑब्जेक्ट का एक चयनित विशेषता दिखाने के बजाय। क्या कोई उसमें मदद कर सकता है?

उत्तर

8

तुम सिर्फ प्रत्येक वर्ग के उदाहरण के एक विशेष गुण प्रदर्शित करना चाहते हैं, तो आप

कर सकते हैं
print([obj.attr for obj in my_list_of_objs]) 

जो my_list_of_objs सूची में प्रत्येक ऑब्जेक्ट की attr विशेषता मुद्रित करेगा। फिर, आप अपने वर्ग, निर्दिष्ट करता है जो कैसे तार में अपनी वस्तुओं कन्वर्ट करने के लिए __str__() विधि को परिभाषित कर सकते हैं:

class evolutions: 
    def __str__(self): 
     # return string representation of self 

print(my_list_of_objs) # each object is now printed out according to its __str__() method 
4

आप अपने वर्ग के "स्ट्रिंग के लिए" विधि ओवरराइड करने के लिए चाहता हूँ:

class Foo: 
    def __str__(self): 
     return "String representation of me" 
2

आप अपने वस्तु [एस] के दोनों __str__, या __repr__ तरीकों को ओवरराइड करने की जरूरत है

1

मेरी वरीयता __repr__ फ़ंक्शन को परिभाषित करना है जो वस्तु को पुनर्निर्माण कर सकती है (जब भी संभव हो)। जब तक आपके पास __str__ भी नहीं है, तो repr() और str() दोनों इस विधि को कॉल करेंगे।

इसलिए उदाहरण

class Foo(object): 
    def __init__(self, a, b): 
     self.a = a 
     self.b = b 
    def __repr__(self): 
     return 'Foo(%r, %r)' % (self.a, self.b) 

यह इस तरह से करने के लिए, आप एक पठनीय स्ट्रिंग संस्करण है, और एक बोनस के रूप में यह मूल वस्तु की एक प्रति प्राप्त करने के लिए eval'ed जा सकता है।

x = Foo(5, 1 + 1) 
y = eval(str(x)) 

print y 
-> Foo(5, 2) 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^