2016-11-25 2 views
1

파이썬에서 텍스트 기반 모험을 만들고 있습니다. 나는 파이썬에 관한 두 권의 책을 준비하고 온라인 과정을 밟았으므로, 나는 모든 기초를 정말로 가지고 있다고 생각한다.언 바운드 메서드 오류 - 텍스트 기반 어드벤처

이제 현재 내 항목을 만들고 있습니다. 내 설정은

항목 -> 무기 -> (여기 특정 무기)입니다.

모든 클래스는 이전 버전을 상속합니다.

Holy_Sword 및 Stick과 같은 항목의 값을 인쇄 할 수 없습니다. 클래스로 생성하지 않고 변수를 사용하여 무기의 인스턴스를 만드는 경우 인쇄 할 수 있습니다. 그러나, 내가 더하고 싶은 것 때문에, 나는 정말로 그들이 수업이되기를 바란다.

내가 점점 오전 오류 : 첫 번째 인수 (대신 아무것도 없어)로 Holy_Sword 인스턴스를 호출 할 필요가

언 바운드 방법 STR()

내 코드는 다음과 같습니다

class Item(object): 
    def __init__(self, name, value, description): 
     self.name = name 
     self.value = value 
     self.description = description 
    def item_description(self): 
     return "Your %s is worth %d gold and is a %s" % (self.name, self.value, self.description) 

class Weapon(Item): 
    def __init__(self,name, value,description, attack): 
     self.attack = attack 
     super(Weapon, self).__init__(name, value, description) 
    def __str__(self): 
     return "Your %s is worth %d gold and has an Attack Damage of %d, it is %s" % (self.name, self.value, self.attack, self.description) 

class Stick(Weapon): 
    def __init__(self, name, value, description, attack): 
     super(Stick, self).__init__(name = "Stick", value= 1, description = "A stick...there may be potential here....or not.", attack = 1) 

class Holy_Sword(Weapon): 
    def __init__(self, name, value, description, attack): 
     super(Holy_Sword, self).__init__(name = "The Holy Sword of Antioch", value= 20, description = "A Sword whose potential far outweighs it's lack of stylishness ", attack = 20) 

class Sword(Weapon): 
    def __init__(self, name, value, description, attack): 
     super(Sword, self).__init__(name = "Sword", value= 3, description = "A Wooden Sword.", attack = 5) 


print Holy_Sword.__str__() 

답변

1

먼저 클래스를 인스턴스화해야합니다.

my_sword = Holy_sword(...) 
print my_sword.__str__() 
1

여기 코드에있는 Holy_Sword은 클래스를 나타냅니다. 그 자체가 Item의 인스턴스는 아닙니다.

Holy_Sword.__str__은 인스턴스 메소드입니다. 여기에서하려고하는 것처럼 스스로 호출 할 수는 없습니다. Holy_Sword 클래스의 인스턴스를 통해 호출되어야합니다.

은 무엇 당신이 할 수있는 것은 Holy_Sword의 인스턴스를 생성하는 것이다. (직접적.이 방법은 일반적으로 단지 str() 기능을 통해 호출 할 필요가 __str__, 예를 들어 str(Holy_Sword)를 호출하지하는 것이 좋습니다 참고)과 문자열을 출력 그 값은 :

sword = Holy_Sword() 
print str(sword) 

그러나, 대신 Holy_Sword 오히려 서브 클래스 것보다, 특정 속성을 가진 Weapon의 인스턴스가 만드는 것이 좋습니다. 다른 무기와 구별되는 유일한 방법이 속성에 있다면, 별도의 클래스가 될 필요가 없습니다.

관련 문제