2010-10-21 10 views
9

मैं एक ऐसा प्रोग्राम बना रहा हूं जो कक्षा के भीतर संग्रहीत डेटा तक पहुंच सके। उदाहरण के लिए मैं इस वर्ग है:कक्षा में सभी चर मुद्रित करें? - पायथन

#!/usr/bin/env python 
import shelve 

cur_dir = '.' 

class Person: 
    def __init__(self, name, score, age=None, yrclass=10): 
     self.name = name 
     self.firstname = name.split()[0] 
     try: 
      self.lastname = name.split()[1] 
     except: 
      self.lastname = None 

     self.score = score 
     self.age = age 
     self.yrclass = yrclass 
    def yrup(self): 
     self.age += 1 
     self.yrclass += 1 

if __name__ == "__main__": 
    db = shelve.open('people.dat') 
    db['han'] = Person('Han Solo', 100, 37) 
    db['luke'] = Person('Luke Skywalker', 83, 26) 
    db['chewbacca'] = Person('Chewbacca', 100, 90901) 

तो इस का उपयोग कर रहा है जैसे एक एकल चर बाहर कॉल कर सकते हैं:

print db['luke'].name 

लेकिन अगर मैं सभी चर मुद्रित करने के लिए चाहता था, मैं एक छोटे से भटक गया हूँ।

अगर मैं चलाएँ:

f = db['han'] 
dir(f) 

मैं:

['__doc__', '__init__', '__module__', 'age', 'firstname', 'lastname', 'name', 'score', 'yrclass', 'yrup'] 

लेकिन मैं उन लोगों में से वास्तविक डेटा मुद्रित करने में सक्षम होना चाहता हूँ।

मैं यह कैसे कर सकता हूं?

अग्रिम धन्यवाद!

उत्तर

2

अपने व्यक्ति वर्ग में __str__ या __repr__ तरीकों परिभाषित करें और वस्तु मुद्रित करें।

5

बल्कि magic methods का उपयोग करने से, Vars अधिक बेहतर हो सकता है।

print(vars(db['han'])) 
0

बस कोशिश beeprint

pp(db['han']) के बाद, यह इस प्रिंट होगा:

instance(Person): 
    age: 37 
    firstname: 'Han', 
    lastname: 'Solo', 
    name: 'Han Solo', 
    score: 100, 
    yrclass: 10 

कोई तरीकों, कोई निजी संपत्तियों।

0

प्रिंट (वार्स (objectname))

आउटपुट: { 'm_var1': 'VAL1', 'm_var2': 'val2'}

यह initialised मूल्यों के साथ सभी वर्ग चर प्रिंट होगा।