NameError: имя 'classroom_list' не определено - PullRequest
0 голосов
/ 06 июня 2019
class Classroom:
    classroom_list=None

    @staticmethod
    def search_classroom(class_room):
        global classroom_list
        for classroom in classroom_list:
            if(classroom==class_room):
                return "Found"
            else:
                return -1
c=Classroom()

Classroom.classroom_list=['w','e','d','o']
Classroom.search_classroom('w')

Ответы [ 2 ]

2 голосов
/ 06 июня 2019

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

class Classroom:
    def __init__(self, classroom_list):
        self.classroom_list = classroom_list

    def search_classroom(self, class_room):
        return "Found" if class_room in self.classroom_list else -1

c = Classroom(['w','e','d','o'])
c.search_classroom('g')
1 голос
/ 06 июня 2019

Когда вы делаете global classroom_list, ваша функция ищет classroom_list во внешней области:

@staticmethod
def search_classroom(class_room):
    global classroom_list    # here
    for classroom in classroom_list:

.. там не определено ни одного classroom_list.

Вместо этого используйте декоратор @classmethod, чтобы сделать то, что вы хотите, так как он даст вам ссылку на текущий класс в качестве его первого параметра:

@classmethod
def search_classroom(cls):
    for classroom in cls.classroom_list:

Затем можно выполнить итерацию по указанному свойству в классе, так как вы присвоили ему значения снаружи.

Однако вы, вероятно, захотите переписать это, чтобы использовать объект и свойство экземпляра вместо свойства класса.

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