私が初めてのPythonのまわりで私の頭を取得していますし、私はここで立ち往生しています:この時点でPythonの前方宣言の内部クラス
class A:
def __init__(self):
a = foo("baa")
class B(A):
b = foo("boo")
def foo(string):
return string
は私が(classes
という名前)上記のファイルをロードし、この問題が発生しました:
$ python
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49)
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from classes import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "classes.py", line 5, in <module>
class B(A):
File "classes.py", line 6, in B
b = foo("boo")
NameError: name 'foo' is not defined
エラーがfoo
が__init__
から直接ではなく呼ばれ、クラスB、であるかに注意してください。クラスB
もまだインスタンス化していないことに注意してください。
最初の質問:
- なぜそれがエラーを返すのですか?私はクラスをインスタンス化していません。
移動中です。 「問題」が数行の上foo()
の定義を移動することによって解決される:
def foo(string):
return string
class A:
def __init__(self):
a = foo("baa")
class B(A):
b = foo("boo")
今私は
>>> x = B()
>>> x.b
'boo'
を行うことができますが、私は
>>> y = A()
>>> y.a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: A instance has no attribute 'a'
さらに質問を行うことはできません:
- これは何ですか約
__init__
を理解していない?
これはforward declarationと同じではないと私は考えています。したがって、この質問は重複しないことを願っています。
私はDSLを実装することを目指していますが、それは主にPythonを学ぶための言い訳です。
攪拌とは何ですか? :) – senderle
これは本当に速いタイプの文字列です。 – Dimitry
確かに:) - ところで+1。 – senderle