1

以下に、オブジェクトを作成しようとしてエラーが発生したクラスのスニペットを示します。

class FoF(object):
        def __init__(self,path):
                filepath=[]
                filepath.append(self.FileOrFolder(path))

これを実行すると、次のエラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "PathOps.py", line 6, in __init__
    def __init__(self,path):
  NameError: global name 'filepath' is not defined

その後、私は試しました:

filepath=[]
class FoF(object):
        def __init__(self,path):
                global filepath.append(self.FileOrFolder(path))

そしてまた:

File "<stdin>", line 1, in <module>
  File "PathOps.py", line 6, in __init__
    global filepath.append(self.FileOrFolder(path))
NameError: global name 'filepath' is not defined

エラーの原因とその修正方法を教えてください。

4

2 に答える 2

2

グローバルな特殊語を使用してみてくださいself

だからこのようなもの

class FoF(object):
    def __init__(self,path):
        self.filepath=[]
        self.filepath.append(self.FileOrFolder(path))

このエラーが発生する理由は、Pythonがあなたがやろうとしていると考えるのは、次の2つのうちの1つだからです。

  1. filepathと呼ばれるグローバル変数を参照しようとしている-これはあなたが試みているものではないことは明らかです
  2. それほど明確ではないのは、filepathと呼ばれるクラス属性を定義することもできるということです。これに関する唯一の問題は、そのクラスの関数でクラス属性を定義できないことです。これは、クラス内、つまりクラス関数の外部でのみ実行できます。

したがって、関数内で変数を宣言するには、その前にselfという単語を使用する必要があります。

クラスの属性にしたい場合は編集**-私が想定しているように、次のように行うことができます。

class FoF(object):
    filepath=[]
    def __init__(self,path):
        self.filepath.append(self.FileOrFolder(path))
于 2012-07-27T20:15:06.810 に答える
0

あなたが私たちに十分な情報を提供していないと思います。例えば:

>>> class FoF(object):
...     def __init__(self, path):
...             junk = []
...             junk.append(path)
... 
>>> foo = FoF('bar/path')

エラーは発生しません。

正確には、あなたは何をしようとしていますか?

于 2012-07-27T20:55:25.557 に答える