python className не определено NameError

У меня есть класс, который мне нужно создать, чтобы вызвать метод, который он содержит. Когда я обращаюсь к нему из другого класса, он работает нормально, но когда я запускаю из терминала, он говорит:

File "myClass.py", line 5, in <module>
  class MyClass:
File "myClass.py", line 23, in ToDict
  td=MyClass()
NameError: name 'MyClass' is not defined

Вставка кода:

class MyClass:
    def convert(self, fl):
        xpD = {}
        # process some stuff
        return xpD

    if __name__ == "__main__":
        source = sys.argv[1]
        td = MyClass()
        needed_stuff = td.convert(source)
        print(needed_stuff)

person user2058724    schedule 10.03.2014    source источник
comment
Предположительно вы импортировали модуль с import toDict. В этом случае класс доступен как toDict.ToDict, а не только ToDict. Если вы настаиваете на имени ToDict, импортируйте его с from toDict import ToDict.   -  person user4815162342    schedule 10.03.2014
comment
Это помогло мне... Большое спасибо... Я провел несколько часов, выясняя, почему он не распознает...   -  person Nats De    schedule 08.06.2018


Ответы (1)


Проблема в том, что ваш блок if __name__ == "__main__" находится внутри определения вашего класса. Это вызовет ошибку, так как код внутри if будет выполняться как часть создаваемого класса до того, как класс будет привязан к имени.

Вот более простой пример этой ошибки:

class Foo(object):
    foo = Foo() # raises NameError because the name Foo isn't bound yet

Если вы отформатируете свой код следующим образом (то есть с if без отступа на верхнем уровне), он должен работать правильно:

class MyClass:
    def convert(self, fl):
        xpD = {}
        # process some stuff
        return xpD

if __name__ == "__main__":
    source = sys.argv[1]
    td = MyClass()
    needed_stuff = td.convert(source)
    print(needed_stuff)
person Blckknght    schedule 10.03.2014