0

pythonクラス属性とインスタンス属性について調べていると、オブジェクトメソッド(またはクラスメソッド)の外部でオブジェクト属性を作成できないことがわかりました。以下のコードのように、Pythonで「NameError」が生成されます。

class test(object):
    def __init__(self):
        self.lst = []
    self.str = 'xyz'

なぜPythonはこれを許可しないのですか?私は言語作成者の決定に疑問を投げかけていませんが、その背後にある理由は何でもあります。同様に、それは技術的に正しくないのか、それともこの振る舞いの他の不利な点なのか。

4

2 に答える 2

5

クラスを定義しているので、外部メソッドを指すインスタンスはありません。`自己をドロップします:

class test(object):
    def __init__(self):
        self.lst = []
    str = 'xyz'

selfクラスではなく、インスタンスを指します。インスタンスを作成して属性に直接割り当てる必要があるか(test().str = 'xyz'、またはメソッド内にいる必要があります(self実際にインスタンスを参照できる場合)。

于 2013-03-21T11:12:43.993 に答える
0

selfPythonの特別な名前ではないので、\を使用できます

class test(object):
    def __init__(foo):
        foo.lst = []

お望みならば。クラスのすべてのメソッドは、インスタンスを最初のパラメーターとして明示的に渡されます。必要に応じて呼び出すことができます。メソッドのスコープ外のパラメーターにアクセスしようとしても、明らかに機能しません。

于 2013-03-21T11:14:29.623 に答える