Форум сайта python.su
У меня есть класс точка:
@dataclass class TPoint: x: int = 0 y: int = 0
self.canvas.bind('<Motion>', self.OnCanvasMouseMove )
def OnCanvasMouseMove(self, event): mouseCords=TPoint(event.x, event.y)
Отредактировано Ess (Дек. 25, 2023 02:51:46)
Офлайн
mouseCords: TPoint = (event.x, event.y)
Отредактировано ZerG (Дек. 25, 2023 08:07:41)
Офлайн
мне нужно к моему типу привести, а не к tuple
a : TPoint = (event.x, event.y) print(type(a)) #<class 'tuple'>
a = TPoint(event.x, event.y) print(type(a)) #<class 'Unit_TTypes.TPoint'>
Отредактировано Ess (Дек. 25, 2023 09:38:15)
Офлайн
в доках написано так
В Python деструктор вызывается не вручную, а полностью автоматически. Это происходит в следующих двух случаях:
когда объект выходит за пределы области видимости
когда счетчик ссылок на объект достигает 0.
в принципе если я добавлю в класс точка
@dataclass class TPoint: x: int = 0 y: int = 0 def __del__(self): print('Inside destructor')
mouseCords=TPoint(event.x, event.y)
Отредактировано Ess (Дек. 26, 2023 09:50:38)
Офлайн
@dataclass class Point: x: int = 0 y: int = 0 pt = Point() print(f"T: {type(pt)} {pt}") pt.x = 3 pt.y = 4 print(f"T: {type(pt)} {pt}")
T: <class '__main__.Point'> Point(x=0, y=0) T: <class '__main__.Point'> Point(x=3, y=4)
def OnCanvasMouseMove(self, event): pt.x = event.x pt.y = event.y
Офлайн
Zerg
в вашем примере вы создаете 1 экземпляр класса pt и обслуживаете его из функции. Ваша функция и переменная находятся в единой зоне видимости. Но переменная и функция могут быть в разных зонах видимости, они могут быть инкапсулированы другими классами. В этом случае я потеряю видимость переменной. но по факту я должен получить переменную нужного “условного” типа тогда когда мне это нужно.
т.е. если вам нужно выполнить действие с=а+b, вы же (с) не будите объявлять где то выше или в полях класса, вы сделаете функцию суммы и передадите в нее (а) и (b).
Отредактировано Ess (Дек. 27, 2023 02:46:47)
Офлайн
Видно что вы пытветесь натянуть на питон другой язык
@dataclass class Point: x: int y: int def updater(x): result = Point(x, x+1) print(type(result), result, id(result)) for i in range(3): updater(i)
<class '__main__.Point'> Point(x=0, y=1) 2340466024208 <class '__main__.Point'> Point(x=1, y=2) 2340466024208 <class '__main__.Point'> Point(x=2, y=3) 2340466024208
Офлайн
Получается вы тоже питон натягиваете на тот же язык , что и я??
ZerGdef updater(x): result = Point(x, x+1)
def OnCanvasMouseMove(self, event): mouseCords=TPoint(event.x, event.y)
Отредактировано Ess (Дек. 28, 2023 04:09:34)
Офлайн
Вы бы перечитали про переменные в питоне
Офлайн
ZerGговорит человек который пишет
Вы бы перечитали про переменные в питоне
mouseCords: TPoint = (event.x, event.y)
Офлайн