объект ‘int’ не имеет атрибута ‘set’

#python #tkinter

#python #tkinter

Вопрос:

Я работаю над проектом, в котором вы нажимаете кнопку, и она изменяет значение int и записывает его на экран. Мои проблемы в том, что когда я пытаюсь установить новое значение для int, оно возвращается с AttributeError .

 def busy():
    unit_status.set(7)
 

Все остальное работает, кроме этой одной строки, и я ни за что на свете не могу понять, почему.

Комментарии:

1. Сообщение об ошибке прекрасно описывает проблему. unit_status является int, а целые числа не имеют атрибута set . Если вы хотите изменить значение unit_status , просто используйте выражение присваивания: unit_status = 7 .

Ответ №1:

Хотя этот поток немного устарел, я не думаю, что ответ LouieC полностью ответил на озабоченность OP.

LouieC упоминает, что set является встроенным классом, что правильно. Но, вероятно, Путь Воина искал значения, поскольку он хотел записать их на экран.

ЕСЛИ он не спрашивал, то я спрашиваю, основываясь на наблюдении в следующем коде, адаптированном из geeksforgeeks.org объяснение. Моя точка зрения рассматривается в комментариях, особенно в конце.

Обратите внимание, что когда применяется метод LouieC, кажется, что он неправильно перезаписывает весь IntVar.

 # importing tkinter module
from tkinter import *
 
# creating Tk() variable
# required by Tkinter classes
master = Tk()
 
# Tkinter variables
# initialization using constructor
intvar = IntVar(master, value = 25, name ="2")
strvar = StringVar(master, "Hello !")
boolvar = BooleanVar(master, True)
doublevar = DoubleVar(master, 10.25)

print(intvar) # This prints the NAME, not the value....  the name is auto-assigned by python
print(strvar) # if not explicity declared...
print(boolvar)
print(doublevar)

print(intvar.get()) # This prints the VALUE, not the name....
print(strvar.get())
print(boolvar.get())
print(doublevar.get())


# But now watch what happens...


intvar = 1


print(intvar)
print(intvar.get())

# What's interesting here is...  print(intvar.get()) worked at line 20...
 

и все же теперь он выдает следующую ошибку

 ---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-16-61984dfda0fb> in <module>
     26 intvar = 1
     27 print(intvar)
---> 28 print(intvar.get())

AttributeError: 'int' object has no attribute 'get'
 

Если запустить тест типа, в первом случае около строки 20:

 print(type(intvar))
 

Один получит:

 <class 'tkinter.IntVar'>
 

Но если выполнить тест того же типа после переназначения LouieC, получится:

 <class 'int'>
 

Вот почему я сказал, что переназначение работает неправильно.

Вопрос OP все еще кажется открытым.

Ответ №2:

Это не то, как вы переназначаете переменную типа integer; вы хотите:

 unit_status = 7
 

set — это встроенный класс в Python; официальные документы здесь

Объект set представляет собой неупорядоченную коллекцию различных хешируемых объектов. Обычное использование включает проверку принадлежности, удаление дубликатов из последовательности и вычисление математических операций, таких как пересечение, объединение, различие и симметричное различие. (Для других контейнеров см. Встроенные классы dict, list и tuple, а также модуль collections .)

Комментарии:

1. set это не ключевое слово, это просто встроенный класс. Кроме того, только потому, что есть вызываемый тип set , не означает, что значения не могут иметь имени метода set .