Ошибка атрибута в питоне.Объект не имеет атрибута - PullRequest
1 голос
/ 29 марта 2019

Этот код является частью более крупной программы, которая использует API Google Sheets для получения данных из облачной базы данных (не очень актуально, но немного контекста никогда не повредит!)

У меня есть этот черный код в одном файле Python с именем 'oop.py'

class SetupClassroom:
    def __init__(self, arraynumber='undefined', tkroot='undefined'):
        self.arraynumber = arraynumber
        self.tkroot = tkroot

    def setarraynumber(self, number):
        from GUI_Stage_3 import showclassroom
        self.arraynumber = number
        print ('set array number:', number)

        showclassroom()

    def settkroot(self, tkrootinput):
        self.tkroot = tkrootinput

self.tkroot был назначен другой частью кода. Этот бит работает, так как я уже проверял, что он назначается, однако, когда я вызываю «self.tkroot» в другом другом файле, подобном этому

def showclassroom():
    from oop import SetupClassroom
    username = current_user.username
    classnumber = getnumberofuserclassrooms(username)
    if SetupClassroom.arraynumber > classnumber:
        errorwindow('you are not enrolled in that many classrooms!')
    else:

        classtoget = SetupClassroom.arraynumber
        print('classtoget:', classtoget)
        root = SetupClassroom.tkroot
        name_label = Label(root, text=classtoget)

        getclassroom(username, classtoget)
SetupClassroom = SetupClassroom

Я получаю эту ошибку

Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/__init__.py", line 1705, in __call__
    return self.func(*args)
  File "/Users/jonathansalmon/PycharmProjects/Coursework_GUI/GUI_Stage2_better.py", line 176, in <lambda>
    l0 = ttk.Button(teacher_root, text=button0text, command=lambda: (SetupClassroom.setarraynumber(SetupClassroom, number=button0text), SetupClassroom.settkroot(SetupClassroom, 'teacher_root')))
  File "/Users/jonathansalmon/PycharmProjects/Coursework_GUI/oop.py", line 99, in setarraynumber
    showclassroom()
  File "/Users/jonathansalmon/PycharmProjects/Coursework_GUI/GUI_Stage_3.py", line 29, in showclassroom
    root = SetupClassroom.tkroot
AttributeError: type object 'SetupClassroom' has no attribute 'tkroot'

Я попытался настроить его в консоли Python, и это сработало, поэтому я понятия не имею, в чем проблема. Если кто-то может помочь, это будет очень цениться Спасибо! John

1 Ответ

1 голос
/ 29 марта 2019

Вы должны создать экземпляр класса, он создаст атрибут в __init__, self.tkroot - это атрибут экземпляра, а не класса:

setupClassroom = SetupClassroom()
print(setupClassroom.tkroot)

Надеюсь, что это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...