'float' object is not callable хотя я пробовал удалять скобки и/или менять тип с помощу int()
import turtle
from win32api import GetSystemMetrics
import objects
win_w = GetSystemMetrics(0)
win_h = GetSystemMetrics(1)
window = turtle.Screen()
x1 = -(win_w / 2) + (0.065 * win_w)
x2 = (win_w / 2) - (0.065 * win_w)
window.bgcolor("black")
window.setup(win_w, win_h)
window.tracer()
player_1 = objects.Game_element([x1, 0], 5, 1)
player_2 = objects.Game_element([x2, 0], 5, 1)
ball = objects.Game_element([0, 0], 1, 1)
window.listen()
def up_1():
player_1.sety(player_1.ycor() + 10)
window.onkeypress(up_1, "w")
while True:
window.update()
Файл Objects.py:
import turtle
class Game_element():
def __init__(self, goto,x,y):
self = turtle.Turtle()
self.color("white")
self.shape("square")
self.penup()
self.shapesize(x,y)
self.goto(goto)
def ycor(self):
self._ycor = turtle.ycor()
return self._ycor
def sety(self,y):
self._sety = turtle.sety(y)
return self._sety
Ответы (1 шт):
Автор решения: CrazyElf
→ Ссылка
Вы зря сделали одинаковое название и у метода и у поля класса. Упрощу ситуацию для понятности:
class Game_element():
def ycor(self):
self.ycor = 3.14 # <-- ПРОБЛЕМА ТУТ
return self.ycor
player1 = Game_element()
y = player1.ycor() # первый вызов будет успешным
y = player1.ycor() # а второй вызов уже не получится
Выходит ошибка на втором вызове:
TypeError Traceback (most recent call last)
<ipython-input-51-3595c07fa764> in <module>()
7 player1 = Game_element()
8 y = player1.ycor()
----> 9 y = player1.ycor()
TypeError: 'float' object is not callable
После выполнения строки self.ycor = turtle.ycor() переменная ycor экземпляра класса player1 больше не указывает на метод def ycor(), она указывает на значение, полученное через вызов turtle.ycor(), а там видимо число с плавающей точкой. Поэтому такая ошибка.
Назовите метод класса как-то по-другому, не также, как называется поле. Для того, чтобы не было такой путаницы, часто принимают такую конвенцию - называть поля класса с подчёркиванием перед именем. Тогда вы их точно не перепутаете с методами. Например, так:
def ycor(self):
self._ycor = turtle.ycor()
return self._ycor