«Нет», данное при попытке вернуть значение dict в Python - PullRequest
1 голос
/ 23 декабря 2011

Я пытаюсь вернуть значения dict при создании экземпляра класса в Python, но вместо этого я получаю «None».

Я очень плохо знаком с Python, поэтому я уверен, что на этот вопрос есть простой ответ.

После запуска ниже:

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

Я заканчиваюс этим:

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

Вместо «Нет» я ожидал «{'age': '30', 'name': 'John', 'location': 'KY'}"

Чего мне не хватает?

Ответы [ 2 ]

6 голосов
/ 23 декабря 2011

Только 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()

Конечно, этот вид цепочки чрезвычайно уродлив;но я уверен, что ты уже знаешь это.Если нет, перепишите свой код следующим образом:

в каждой из этих функций, просто установите значение и выполните , а не , чтобы вызвать одну из ваших других функций.Затем добавьте такую ​​функцию:

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

В коде, использующем класс, сделайте следующее:

t2 = TestTwo()
t2.prompt_data()
output = t2.results()
0 голосов
/ 23 декабря 2011

функция your_age () не возвращает никаких значений, конечно, вывод равен None

...