2011-12-23 9 views
1

Pythonでクラスのインスタンスを作成するときにdictの値を返そうとしていますが、代わりに "None"が返されます。Pythonでdictの値を返そうとしたときに "None"が返される

私はPythonの新機能ですから、これには簡単な答えがあると確信しています。

は、以下の実行後:

代わりに "なし"、私は「期待していた{ '時代' の
MacBook-Pro-2:python johnrougeux$ python class_test.py 
What is your age? > 30 
What is your name? > John 
Where do you live? > KY 
You live in KY 
Your number is 30 
Your name is John 
None 

: '30'、「名前

class TestTwo(object): 

    def __init__(self): 
      self.attributes = { 
      'age': "", 
      'name' : "", 
      'location': "" 
    } 

    def your_age(self): 
     self.attributes['age'] = raw_input("What is your age? > ") 
     self.your_name() 

    def your_name(self): 
     self.attributes['name'] = raw_input("What is your name? > ") 
     self.your_location() 

    def your_location(self): 
     self.attributes['location'] = raw_input("Where do you live? > ") 
     self.results() 

    def results(self): 
     print "You live in %s" % self.attributes['location'] 
     print "Your number is %s" % self.attributes['age'] 
     print "Your name is %s" % self.attributes['name'] 
     d = self.attributes 
     return d 

output = TestTwo().your_age() 
print output 

私はこれで終わります':' John '、' location ':' KY '} "

私は何が欠けていますか?

+1

これは、クラスを使用するための完全な後方アプローチです。最初にオブジェクトを構築するために必要な情報を取得し、それを構築します。クラスは、その情報を取得する責任を負うべきではなく、その情報を使用することについてのみ責任を負います。 –

答えて

6

results()のみが何かを返します。あなたも、あなたは彼らが何かを返したい場合は、他の機能でそれを返すことで、コールチェーンに沿ってその戻り値を渡す必要があります。もちろん

def your_age(self): 
    self.attributes['age'] = raw_input("What is your age? > ") 
    return self.your_name() 

def your_name(self): 
    self.attributes['name'] = raw_input("What is your name? > ") 
    return self.your_location() 

def your_location(self): 
    self.attributes['location'] = raw_input("Where do you live? > ") 
    return self.results() 

チェーンのこの種は非常に醜いです。私はあなたがすでにそれを知っていると確信しています。そうでない場合は、

のそれぞれの関数で、値を設定してでない場合は、は他の関数の1つを呼び出します。そして、このような機能を追加します。

def prompt_data(self): 
    self.your_age() 
    self.your_name() 
    self.your_location() 

をコードでクラスを使用して、次の操作を行います。

t2 = TestTwo() 
t2.prompt_data() 
output = t2.results() 
+0

ありがとう、本当に役に立ちました。まさに私が探していたもの! –

0

関数your_ageを()もちろん出力はなし

ではない、任意の値を返しません。