Я изучаю Python, и у меня есть проблема.

Я создал класс, и когда я его создаю, Python говорит, что он не был определен.

Вот мой код.

Мой класс dirNode в файле dirTree.py:

class dirNode:
    'Represente a directory of a files system'

    # Create an instance of the class
    def __init__(self, path, name, parent=None):
        self.path=path
        self.name=name
        self.nbDir=0
        self.nbFile=0
        if parent is not None:
            self.parent=parent
        else:
            self.parent=None


    # Add a sub-directory
    def addDir(self, name, dirNode):
        self.dirs[name]=dirNode
        self.nbDir+=1

    # Print the number of sub-directory
    def printDirCount(self):
        print self.nbDir


    # Add a file
    def addFile(self, name, fileNode):
        self.files[name]=fileNode
        self.nbFile+=1

    # Print the number of files
    def printFilesCount(self):
        print self.nbFile

Вот мой «основной» код:

#! /usr/bin/python
# -*- coding: utf-8 -*-

import os
import sys
import dirTree


direct=sys.argv[1]
isRoot=1

print direct

for root, dirs, files in os.walk(direct):
    if (isRoot==1):
        rootDir=dirNode(root, root)
        curDir=rootDir
        isRoot=0
    else:
        parent=curDir
        curDir=dirNode(root, root, parent)

    for name in dirs:
        print "foo"

Вот что говорит Python:

$./test.py datas/
datas/
Traceback (most recent call last):
  File "./test.py", line 78, in <module>
    rootDir=dirNode(root, root)
NameError: name 'dirNode' is not defined
-2
Phantom 5 Июл 2019 в 15:36

4 ответа

Лучший ответ

Вы импортируете модуль dirTree, но не сам класс dirNode.

Попробуйте изменить импорт на from dirTree import dirNode. В качестве альтернативы вы можете создать экземпляр класса, выполнив dirtree.dirNode(...), но я бы не рекомендовал его для вашего случая (см. Комментарии ниже для более подробного объяснения).

Наконец, пожалуйста, убедитесь, что ваш код внутри метода класса __init__ имеет правильные отступы (не уверен, что он просто сломался, когда вы вставили его сюда, он действительно такой же, как в вашем коде) :)

1
Luca Bezerra 5 Июл 2019 в 12:51
from dirTree import dirNode

Что делать с _________ импорт ________ <---- Какую переменную вы называете это?

0
Lucas Urban 6 Июл 2019 в 12:13

Ты должен сделать:

rootDir = dirTree.dirNode(root, root)

Или оставьте строку как есть и измените оператор импорта на:

from dirTree import dirNode
0
Akaisteph7 5 Июл 2019 в 12:39

Я полагаю, ваш класс и основной нет в одном файле. Если это так, то вам нужно импортировать ваш класс в ваш основной файл from dirTree import dirNode

0
Palash Jain 5 Июл 2019 в 12:39