2011-10-19 18 views
0

Pythonでオブジェクトにクラスをアタッチしようとすると少し問題があります。私はテキストファイル 'file'を持っています。これは各行のリストに分かれています。プログラムはすべての行を読み、名前とロングネームを表示します。クラスをオブジェクトにアタッチしようとするとエラーメッセージが表示される

「ジョン 『\ n』のジョン・トラボルタ」(...)

ここでは、コードの私のビットがあります:

class Name: 
    def __init__(self, name, longname): 
    self.name=name 
    self.longname=longname 
    def __str__(self): 
    s="Name:"+self.name 
    s+="\n Longname:"+self.longname 
    def func(): 
    for line in file: 
     name=line[:1] 
     longname=line['\n':] 
c=Name(name, longname) 
c.func() 

私は私のエラーメッセージが表示されます。このように見えるテキストファイルことを想像してみて'name'と 'longname'は定義されていませんが、私はこれを私の関数で行いました??? :(

私はクラスの外の関数を置く場合には、このように、動作します:

def func(): 
for line in file: 
    name=line[:1] 
    longname=line['\n':] 
    c=Name(name, longname) 
    print c 

ヘルプが必要ですあなたがそれらを使用することができます前に、名前とLONGNAMEに何かを割り当てる必要が

+0

'' name 'と' shortname 'が定義されていないと言ったとき、あなたは 'name'と' longname'が定義されていないことを意味します。 – Snaxib

+0

宿題に問題がありますか? –

+0

はい、私は 'ロングネーム'を意味します。はい宿題の問題とこれは本当の問題ではない、私のプログラム内で問題を説明しようとしているだけの例 – John

答えて

1

を:!

name = 'foo' 
longname = 'foo bar' 
c=Name(name, longname) 
c.func() 

が、私は私の機能でこれをやった?

  • まず、あなたはまだあなたの関数を呼び出していませんでした。関数呼び出しは、の後にエラーを示す行です。
  • 第2に、この関数には独自のスコープがあります。 nameは、グローバルnameとは異なります。

funcメソッドをクラス定義の中に移動するのは意味がありません。あなたが働いているコードは、それを行うためのより良い方法です。

+0

はい、私はあなたが何を意味するかを参照してください、しかし、問題は、私の名前とロングネームは私のテキストファイルを読んでいるb4関数です。後で各人の名前とロングネームを使用する必要がある場合は想像してください。私は何をすることができますか?関数の最後にcを返しますか? – John

+0

@ John:名前オブジェクトをリストに格納します。 –

+0

申し訳ありません、ありがとうございます。 – John

関連する問題