2014-09-23 3 views
-3

Я не знаю, почему я получаю эту ошибку, и это действительно раздражает ... кто-нибудь видит проблему? я получаю эту ошибку:AttributeError: объект 'int' не имеет атрибута Python

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

Вот мой код:

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. movefigure - отдельный метод, не принадлежит ting –

+0

Я думал, что когда вы это сделали, он возьмет первый объект (ting) как сам в args? как мне это сделать? – RasmusGP

+0

просто снимите ting. и запустите movefigure (ting, «вверх», 20) –

ответ

1

Вы путаете функции и методы.

Метод - это функция, определенная в классе; он принимает аргумент 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, и вы не называете его синтаксисом точек. (Конечно, нет ничего остановки вас от вызова любого параметра self если вы хотите, точно так же как нет ничего не мешает вам писать функцию, называемую print_with_color, что стирает файл с именем /kernel, но это не очень хорошая идея ...)


Итак, вы хотите сделать это:

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

movefigure(ting, "up", 20) 
Смежные вопросы