2010-08-24 22 views
5

तो यह पायथन समस्या मुझे समस्याएं दे रही है क्योंकि मैंने कोड को विभिन्न फ़ाइलों में पुन: सक्रिय करने का प्रयास किया है। मैं एक फ़ाइल object.py कहा जाता है और उस में, संबंधित कोड है:पायथन - टाइप एरर: अनबाउंड विधि

class Object: 
#this is a generic object: the player, a monster, an item, the stairs... 
#it's always represented by a character on screen. 
def __init__(self, x, y, char, color): 
    self.x = x 
    self.y = y 
    self.char = char 
    self.color = color 

def move(self, dx, dy): 
    #move by the given amount, if the destination is not blocked 
    #if not map[self.x + dx][self.y + dy].blocked: 
     self.x += dx 
     self.y += dy 

अब, जब मैं इस फ़ाइल को संकलित करने के लिए विशेष रूप से मैं इस त्रुटि मिलती है कोशिश:

TypeError: unbound method __init__() must be called with Object instance as first argument (got int instance instead) 

कोड है कि इस कॉल करने के लिए प्रयास कर रहा है:

player = object_info.Object.__init__(BurglaryConstants.SCREEN_WIDTH/2, BurglaryConstants.SCREEN_HEIGHT/2, '@', libtcod.white) 

जब संकलन कौन इस त्रुटि का कारण बनता है:

AttributeError: 'module' object has no attribute 'Object' 

तो इस सब के साथ बिल्ली क्या चल रहा है और मुझे इसे कैसे पुन: सक्रिय करना चाहिए? इसके अलावा मुझे लगता है कि ऑब्जेक्ट नामक एक वर्ग होना बहुत अच्छा कोडिंग अभ्यास नहीं है, सही?

आपकी मदद के लिए धन्यवाद!

उत्तर

4

अद्यतन

आप एक फ़ाइल में Object परिभाषित कर रहे हैं object.py कहा जाता है। और फिर भी ग्राहक object_info.Object को संदर्भित करता है। क्या यह एक टाइपो है?

Also I assume having a class called Object isn't a very good coding practice, correct?

सही। अपनी कक्षा का नाम किसी अन्य चीज़ पर बदलें, GenericObject या GenericBase कहें। मॉड्यूल नाम object.py का भी उपयोग न करें। इसे उचित रूप से बदलें।

इसके अलावा

आप Object का एक उदाहरण के निर्माण कर रहे हैं, लेकिन जिस तरह से आप यह कर रहे हैं गलत है। गोता में अजगर से

player = object_info.Object(BurglaryConstants.SCREEN_WIDTH/2, BurglaryConstants.SCREEN_HEIGHT/2, '@', libtcod.white) 

यह chapter उपयोगी साबित करना चाहिए: इस प्रयास करें।

+0

यह काफी काम नहीं करता है, मुझे संकलन करते समय भी वही विशेषताएँ मिल गई है। – Brad

+0

@ ब्रैड: क्या आप अपनी त्रुटि के स्टैक ट्रेस पेस्ट कर सकते हैं? –

+0

@ ब्रैड: अद्यतन उत्तर। ऊपर देखो। –

1

सबसे पहले, हमेशा नई शैली के वर्गों का उपयोग करें, यानी object से उत्तराधिकारी। (यह आवश्यक नहीं है अगर तुम अजगर 3 है, जो केवल नई शैली वर्ग हैं चल रहे हैं)

दूसरा, बुला __init__ यहाँ बहुत संभावना गलत है - अगर आप एक नया वस्तु instanciate के लिए, बस Object(x, y, char, color) लिखना चाहते हैं।

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