2010-07-11 15 views
22

हे सब, हे मेरी समस्या यह है कि मैं यह समझने की कोशिश कर रहा हूं कि किसी अन्य वर्ग में कक्षा कैसे प्राप्त करें।पायथन 2.6: कक्षा के अंदर कक्षा?

मैं क्या कर रहा हूं कि मेरे पास अपने सभी आंकड़ों के साथ एक हवाई जहाज के लिए एक कक्षा है, यह कितनी तेजी से उड़ सकती है, कितनी दूर जा सकती है, ईंधन की खपत, और इसी तरह। तब मेरे पास एक फ्लाइट क्लास है जो उड़ान के बारे में सभी विवरण है: दूरी, स्थान और समय शुरू करना, स्थान और समय, अवधि, और इसी तरह समाप्त करना।

लेकिन मुझे एहसास हुआ कि प्रत्येक हवाई जहाज में कई उड़ानें हैं, तो क्यों नहीं सभी उड़ान डेटा हवाई जहाज वर्ग में डाल दें? कैसे मैं एक और वर्ग में एक वर्ग रखूँ तो मैं कुछ इस तरह कॉल कर सकते हैं हालांकि:

Player1.Airplane5.Flight6.duration = 5 hours 

Ive कुछ हद तक हवाई जहाज वर्ग के साथ यह किया है, लेकिन जब मैं जानकारी को बचाने के लिए जाना (एक पाठ दस्तावेज़ में बाहर सब कुछ लिस्टिंग), यह सब मुझे डेटा का हेक्स स्थान देता है, न कि वास्तविक तार।

class Player (object):#Player Class to define variables 
    '''Player class to define variables''' 

    def __init__ (self, stock = 0, bank = 200000, fuel = 0, total_flights = 0, total_pax = 0): 
     self.stock = stock 
     self.bank = bank 
     self.fuel = fuel 
     self.total_flights = total_flights 
     self.total_pax = total_pax 
     self.Airplanes = Airplanes 
     self.flight_list = flight_list 

क्या कक्षा में कक्षा को रखने का कोई तरीका है? या मुझे एक सुपर प्लेयर क्लास बनाने की ज़रूरत होगी जो सभी कक्षाओं का उपयोग करने वाली सभी जानकारी को संभालती है?

उत्तर

55

मुझे लगता है कि आप वस्तुओं और कक्षाओं को भ्रमित कर रहे हैं। कक्षा के अंदर एक वर्ग इस तरह दिखता है:

class Foo(object): 
    class Bar(object): 
     pass 

>>> foo = Foo() 
>>> bar = Foo.Bar() 

लेकिन यह मेरी तरह नहीं है जैसा आप चाहते हैं। शायद आप एक सरल नियंत्रण पदानुक्रम के बाद कर रहे हैं:

class Player(object): 
    def __init__(self, ... airplanes ...) # airplanes is a list of Airplane objects 
     ... 
     self.airplanes = airplanes 
     ... 

class Airplane(object): 
    def __init__(self, ... flights ...) # flights is a list of Flight objects 
     ... 
     self.flights = flights 
     ... 

class Flight(object): 
    def __init__(self, ... duration ...) 
     ... 
     self.duration = duration 
     ... 

तो फिर तुम निर्माण और वस्तुओं इस प्रकार का उपयोग कर सकते हैं:

player = Player(...[ 
    Airplane(... [ 
     Flight(...duration=10...), 
     Flight(...duration=15...), 
     ] ...), 
    Airplane(...[ 
     Flight(...duration=20...), 
     Flight(...duration=11...), 
     Flight(...duration=25...), 
     ]...), 
    ]) 

player.airplanes[5].flights[6].duration = 5 
25

ऐसा लगता है जैसे आप के बारे में एकत्रीकरण बात कर रहे हैं। आपके player कक्षा के प्रत्येक उदाहरण में Airplane के शून्य या अधिक उदाहरण हो सकते हैं, जो बदले में, Flight के शून्य या अधिक उदाहरण हो सकते हैं। आप संख्याओं के साथ चर नामकरण सहेजने के लिए अंतर्निहित list प्रकार का उपयोग कर पाइथन में इसे कार्यान्वित कर सकते हैं।

class Flight(object): 

    def __init__(self, duration): 
     self.duration = duration 


class Airplane(object): 

    def __init__(self): 
     self.flights = [] 

    def add_flight(self, duration): 
     self.flights.append(Flight(duration)) 


class Player(object): 

    def __init__ (self, stock = 0, bank = 200000, fuel = 0, total_pax = 0): 
     self.stock = stock 
     self.bank = bank 
     self.fuel = fuel 
     self.total_pax = total_pax 
     self.airplanes = [] 


    def add_planes(self): 
     self.airplanes.append(Airplane()) 



if __name__ == '__main__': 
    player = Player() 
    player.add_planes() 
    player.airplanes[0].add_flight(5) 
0
class Class2 : 
    def __init__(self,Data): 
     self.Data = Data 

class Class1 : 
    def Class2(self,Data): 
     return Class2(Data) 


Class1 = Class1() 
Class2 = Class1.Class2('now you see me') 
print Class2.Data 
+0

कुछ कार्यक्षमता विवरण की जरूरत है। –

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