2013-10-18 4 views
0

캐릭터를 선택하고 해당 캐릭터에게 무기를 부여한 다음 매우 유사한 RPG와 유사한 게임을 작성하려고합니다. 캐릭터와 무기. weapon 클래스는 Equip이라는 최상위 클래스에 속합니다. 나는 그러나, 무기의 통계를 통합하는 공격력 변수를 설정하려고하면 내가 얻을 : 클래스 속성이 객체에 전달되지 않음

'Char' object has no attribute 'weapon.' 

내가 기본적으로 None로 설정 Char 클래스 weapon 값을 갖는다. 그러나 아래에서는 dean.weapon = sword ( weapon)을 사용하여 캐릭터 ( dean)를 무기로 지정했습니다. weapon.wgtself.weapon.wgt으로 변경하려고 시도했지만 도움이되지 않습니다.

attack 코드를 제외하고 코드의 관련 부분을 참조하십시오. 질문과 관련이 없으므로 문제가 복잡해지기 때문에 코드가 필요하지 않으면 생략합니다.

나는이 코드가 엉망이라고 생각한다. 그래서 건설적인 비평은 인정 될 것이다.

코드 :

class Char(object): 

    def __init__(self, name): 
     name = name 
     hp = 300 
     mp = 10 
     strn = 1 
     dmg = 1 
     dex = 1 
     armor = 0 
     weapon = None 

    attack_speed = dex 

    intact_bones = ["right arm", "left arm", "right leg", "leg leg", "skull", "sternum", "nose"] # JUST ASSUME RIGHT SIDE IS PRIMARY SIDE FOR NOW 

    broken_bones = [] ### define what to do per bone if bone is in this list 

    dmg = strn * self.weapon.wgt 


class Equip(object): 
    wgt = 1 
    desc = "" 

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

class weapon(Equip): 
    impact = 1 
    sharp = 1 

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

sword = weapon("Sword") 
sword.wgt = 10 
sword.impact = 6 
sword.sharp = 7 


dean.weapon = sword 
dean.attack(hamilton) 

답변

2

인스턴스의 속성을 만들기 위해, 다른 __init__ 방법에서와 같이, self을 사용해야합니다.

def __init__(self, name): 
    self.name = name 
    self.hp = 300 
    ... 
    self.weapon = None 

또한 I는 다른 특성도, 즉 인스턴스 속성 수, 예를 __init__ 방법대로 설정 self를 사용한다고 생각 self.wgt, self.impact, self.broken_bones, 생성자 등

+0

아, 의미가 있습니다. 좋아, 내가 집에 가서 그걸 고칠 때 나는 이것을 시험 할 것이다. 고맙습니다. – rrr45

+0

좋아, 그랬어. 그래서, 기본적으로, 나는 일반적으로 __init__ 아래에 모든 것을 앞에 놓아야합니다. 또한 동일한 코드에 대해 새로운 문제가 발생했습니다. 나는 StackOverflow에 상당히 새로운 것이다. 여기서 질문하거나 새 스레드를 시작해야합니까? – rrr45

+0

@ rrr45 글쎄, _everything_ 아니지만 모든 인스턴스의 속성이어야합니다. 임시 변수를 선언하면'self'를 사용할 필요가 없습니다. 다행히 도울 수있어. 후속 질문이있는 경우 새로운 질문으로 게시해야하지만 상황에 따라이 질문에 대한 링크를 추가해야합니다. –

1

변경 몸은, 지금은 오히려 개체 변수보다는 지역 변수에 값을 할당하기 때문에 :

def __init__(self, name): 
    self.name = name 
    self.hp = 300 
    self.mp = 10 
    self.strn = 1 
    self.dmg = 1 
    self.dex = 1 
    self.armor = 0 
    self.weapon = None