2014-09-23 8 views
-3

왜이 오류가 발생하는지 알지 못합니다. 정말 귀찮습니다. 나는이 오류가 발생합니다 :AttributeError : 'int'객체에 속성이 없습니다. Python

from tkinter import * import time 


def movefigure(self, direction, ammount): 
    x = 0 
    y = 0 
    ammount2 = 0 

    if direction == "up": 
     print("Direction = " + ammount) 
     y = ammount 
    elif direction == "down": 
     print("Direction = " + ammount) 
     ammount2 = ammount - (ammount * 2) 
     y = ammount2 
    elif direction == "right" + ammount: 
     print("Direction = " + ammount) 
     x = ammount 
    elif direction == "left": 
     print("Direction = " + ammount) 
     ammount2 = ammount - (ammount * 2) 
     y = ammount2 
    canvas.move(self, x, y) 


root = Tk() 

root.title('Canvas') 

tingx = 100 
tingy = 100 

tingxMove = 1 
tingyMove = 1 

canvas = Canvas(root, width=400, height=400) 
ting = canvas.create_rectangle(205, 10, tingx, tingy, tags="Ting", outline='black', fill='gray50') 

canvas.pack() 

ting.movefigure(ting, "up", 20) 
root.mainloop() 
+0

. movefigure는 별도의 메소드가 아닙니다. ting에 속하지 않습니다. –

+0

args에서 자기가 첫 번째 객체 (팅아)를 취할 것이라고 생각했습니다. 어떻게해야합니까? – RasmusGP

+0

그냥 ting을 제거하십시오. movefigure (ting, "up", 20)를 실행하십시오. –

답변

1

당신은 기능과 방법을 혼합하고 있습니다 :

line 66, in <module> 
    ting.movefigure(ting, "up", 20) 
    AttributeError: 'int' object has no attribute 'movefigure' 

가 여기 내 코드입니다.

메소드는 클래스에 정의 된 함수입니다. self 인수를 취해 그 클래스의 인스턴스에서 호출합니다. 좋아요 :

class Spam(object): 
    def __init__(self, eggs): 
     self.eggs = eggs 
    def method(self, beans): 
     return self.eggs + beans 

spam = Spam(20) 
print(spam.method(10)) 

이렇게하면 30이 인쇄됩니다.


그러나 movefigure은 어떤 클래스의 메소드도 아니며 단지 일반적인 기능입니다. 즉, self 매개 변수를 사용하지 않으며 도트 구문을 사용하여 호출하지 않습니다.


(당신이 /kernel라는 이름의 파일을 삭제합니다 print_with_color라는 함수를 작성에서 당신을 중지 아무것도처럼 원하지만, 좋은 생각이 아니라면 물론 ... 어떤 매개 변수 self를 호출을을 중지 아무것도 없다)

그래서, 당신은이 작업을 수행하고 싶었 : 팅이 movefigure 관련 않는 방법

def movefigure(rect, direction, ammount): 
    # all of your existing code, but using rect instead of self 

movefigure(ting, "up", 20) 
관련 문제