2016-09-01 8 views
0

listPersons()コマンドを実行しようとすると、すべてのPerson/InstanceはsayHello()メソッドを呼び出す必要があります。しかし、名前がstrなので、AttributeErrorが発生します(下記参照)。Pythonでメソッドに使用する文字列をフォーマットするにはどうすればよいですか?

私はそれらのメソッドを使用できるように名前をフォーマットしますか?

class person: 
    def __init__ (self, name): 
     self.name = name 
    def sayHello(self): 
     print("Hello World, I'm", self.name) 

def listPersons(): 
    print ("There are", len(names), "persons here, please everybody say hello to the world!") 

    for name in names: 
     print(name.sayHello()) 

names = ["Tobias", "Lukas", "Alex", "Hannah"] 

for name in names: 
    globals()[name] = person(name) 

はAttributeError:

Traceback (most recent call last): 
File "<pyshell#97>", line 1, in <module> 
listPersons() 
File "/Users/user/Desktop/test.py", line 12, in listPersons 
print(name.sayHello()) 
AttributeError: 'str' object has no attribute 'sayHello' 

あなたの助けをありがとうございました! :-)

+0

は、このコードを貼り付けるとPython 2と3 – idjaw

答えて

2

名前リストは作成する人物オブジェクトではなく、文字列のリストなので、このエラーが表示されます。 globals()を使用しているので、各人物はグローバルスコープ内の変数に割り当てられています。 globals()を使用するのではなく、人のリストを持つことをお勧めします。

もう1つの問題はperson.sayHelloの出力を印刷しようとしていることですが、何も返されません。代わりに関数を呼び出すことができます。

これらの変化の両方が一緒に:私はコピー

class person: 
    def __init__ (self, name): 
     self.name = name 
    def sayHello(self): 
     print("Hello World, I'm", self.name) 

def listPersons(): 
    print ("There are", len(people), "persons here, please everybody say hello to the world!") 

    for name in people: 
     name.sayHello() 

names = ["Tobias", "Lukas", "Alex", "Hannah"] 
people = [] 

for name in names: 
    people.append(person(name)) 
+0

の両方でエラーを取得しておりません、あなたの役に立つの答えと説明をありがとう! Tobias.sayHello()を呼び出せるようにインスタンスを作成する方法はありますか? – tobiaspk1

+0

people.append(person(name))の後に次の行を追加して解決します:globals()[people [i] .name] = people [i]!これはそれを解決する有効な方法ですか? – tobiaspk1

+0

変数を作成したりアクセスしたりするためのラウンドであるため、グローバルを使用しないことをお勧めします。 Tobias.sayHello()を見ると、Tobias = person( "Tobias")のような行が見えます。このようにglobals()を使用すると、コードを読みにくくして他のバグまで開くことができます。たとえば、名前リストの値が「人」の場合はどうなりますか?私が示唆するもう1つの選択肢は、人々を辞書に格納することです。人々= {}のようなもの、そして人々[名前] =人(名前)。それであなたは人々["Tobias"] sayHello()をすることができます。 – PYOak

関連する問題