2013-02-26 1 views
0

super, 초보자 용과 일반 프로그래밍. 나는 충분히 단순해야하는 질문이있다. 파이썬 버전 3.1을 사용하여 파이썬 초보자 프로그래밍 책을 사용하고 있습니다.self.size = size를 사용할 때 구문이 유효하지 않음

현재이 책의 프로그램 중 하나를 작성 중입니다. 파이썬을 사용할 때 들여 쓰기가 얼마나 중요한지 배웠습니다. 그래서 내가 발견 한 오류를 고치고 나서 self.size = size을 입력하면 강조 표시됩니다. self 코드 블록에서 구문이 올바르지 않습니다.하지만이 단어를 설명서에서 입력하고 있으므로 잘못된 내용을 잘 모릅니다. 내가 쉘에이 특정 블록을 넣어하려고 할 때

def _init_(self, x, y, size): 
    """ Initialize asteroid sprite. """ 
    super(Asteroid, self)._init_(
    image = Asteroid.images[size], 
    x = x, y = y, 
    dx = random.choice([1, -1]) * Asteroid.SPEED * random.random()/size, 
    dy = random.choice([1, -1]) * Asteroid.SPEED * random.random()/size 

    self.size = size 

문제는, 마지막 라인, 그것은 자기에게 잘못된 구문하지만 아무것도 ... 또한 마지막 메모를 강조한다는 것입니다 : 여기에 코드 블록이다 그것을 실행하면 구문 오류가 발생하지만 같은 것은 아닙니다.이 블록의 첫 번째 줄에 콜론 뒤에 하나가 나와서 전체 빈 영역을 빨간색으로 강조 표시하고 ..... 왜. 나는 자기 물건을 부각시키고 도와 줄 수있을 정도로 그것을 껍질에 넣고 있었다. 그러나 그 대신에 나에게 완전하게 다른 무엇인가 보여준다.

도움이 될 것입니다. 감사!

+5

'_init__'이 아닌'def __init__'이어야하며 이중 밑줄이 있어야합니다. – heltonbiker

+2

분명히 당신은 둥근 괄호가없고, "dy ="라인의 끝 부분이 없습니다. – Vorsprung

답변

3

괄호를 닫는 것을 잊었습니다.

일반적으로, 당신은 몇 가지 괄호를 종료하는 것을 잊지 때, 해석 된 점을 다음 줄에있는 같은 오류 : 아마도

def _init_(self, x, y, size): 
    """ Initialize asteroid sprite. """ 
    super(Asteroid, self)._init_( <-- here you have a parentheses opening 
     image = Asteroid.images[size], 
     x = x, y = y, 
     dx = random.choice([1, -1]) * Asteroid.SPEED * random.random()/size, 
     dy = random.choice([1, -1]) * Asteroid.SPEED * random.random()/size <-- no more commas here 

    self.size = size <-- first line without a trailing comma OR parentheses: SYNTAX ERROR HERE! (even though the assignment itself is ok) 

어떤 책이 실제로이었다이 의미 -의 마티 피에 터스가 지적했듯이, 일부 self.__init__ 매개 변수 (xy)가 다른 매개 변수가 다른 곳 (image)에서 읽혀 지거나 즉석에서 (dxdy) 생성되는 부모의 __init__ 메서드로 전달됩니다.

def __init__(self, x, y, size): 
    """ Initialize asteroid sprite. """ 
    super(Asteroid, self)._init_(
     image = Asteroid.images[size], 
     x = x, 
     y = y, 
     dx = (random.choice([1, -1]) * Asteroid.SPEED * random.random()/size), 
     dy = (random.choice([1, -1]) * Asteroid.SPEED * random.random()/size)) 

    self.size = size 

어떤 방법 파이썬 (루틴 클래스 내에 정의) 것을 아는 것이 중요합니다 : 마지막으로, 매개 변수 중 하나 (size는) self.size에 할당 self.__init__의 몸에 만 인스턴스에 전달 첫 번째 인수를 자동으로받습니다.이 인수는 객체 인스턴스 자체입니다. 원하는대로 호출 할 수도 있지만, self은이를위한 범용 Python 규칙입니다. 따라서 __init__을 정의하고 self을 첫 번째 매개 변수로 전달하면이 함수 전체에서이 매개 변수를 사용하여 작성중인 개체를 참조 할 수 있습니다. 따라서 self.x = x을 말하면 객체에 x 속성이 있고 객체 생성시 전달한 x 인수 값이됩니다.

+1

또한 O'Reilly의 "Learning Python"을 읽기를 강력히 권장합니다. (가볍게 농담과 참조가 많은) 파이썬이 작동하는 방식으로 "무슨 일이 일어나고 있는지"를 이해하게됩니다. 많은 도움을 주었고, 내가 읽었던 Python 학습 자료 중 가장 접근하기 쉽고 완전한 것입니다. – heltonbiker

+0

지금까지 도와 주셔서 감사합니다. 나는 당신들이 나에게 제공 한 정보로 지금 문제를 해결할 수 있다고 생각합니다! 그 짜증나는 프로그래밍에서 항상 당신이 그리워하는 작은 것들 : P. – Orex

관련 문제