2010-08-24 8 views
5

Yani bu Python sorunu, kodu farklı dosyalara yeniden kodlamayı denediğimden beri bana sorun veriyor. Ben object.py adlı bir dosya varsa ve o, ilgili kod şudur:Python - TypeError: ilişkisiz yöntem

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 

Şimdi, özellikle bu hatayı alıyorum bu dosyayı derlemeye çalıştığınızda:

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

kodudur Bu aramaya teşebbüs geçerli: derlerken bu hataya neden

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

:

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

Peki, bütün bunlarla ne halt ediyor ve bunu nasıl yeniden gözden geçirmeliyim? Ayrıca, Object isimli bir sınıfın çok iyi bir kodlama uygulaması olmadığına inanıyorum, doğru mu?

Yardımlarınız için teşekkürler!

cevap

4

Güncelleme

Bir dosyada Object tanımlıyorsanız object.py aradı. Ve yine de müşteri object_info.Object anlamına gelir. Bu bir yazım hatası mı?

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

Doğru. Sınıfınızı başka bir şeye yeniden adlandırın, GenericObject veya GenericBase deyin. Ayrıca object.py modül adını kullanmayın. Uygun şekilde değiştirin.

Ayrıca

Sen Object bir örneğini inşa edilir ancak bunu yapıyor yolu yanlıştır. Bu deneyin:

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

Bu chapter Dive Into the Python yararlı ispatlamak zorundadır.

+0

Bu oldukça işe yaramadı, derleme sırasında hala aynı AttributeError var. – Brad

+0

@Brad: Elde ettiğiniz hatanın yığın izini yapıştırabilir misiniz? –

+0

@Brad: güncellenmiş cevap. Yukarıyı görmek. –

1

İlk önce her zaman yeni stil sınıfları kullanın, yani object'dan devralın. Sadece Object(x, y, char, color) yazma, yeni bir Object instanciate istiyorsanız -

İkinci __init__ burada çok muhtemeldir yanlış çağırarak, (yalnızca yeni tarzı sınıfları vardır Python 3, çalıştırıyorsanız, bu gerekli değildir).