如何从类中输入并进入主脚本

时间:2013-11-14 22:25:16

标签: python list class input python-3.x

我无法再使用我正在处理的程序并提出问题。我会先发布我的代码。

我的班级代码如下:

import requests
import json

class requestNew:

    def __init__(self):
        self.countrychoice = []
        self.citychoice = []

    def countryChoice(self):
        countryc = input("Enter which country your city is in(in english): ")
        self.countrychoice.append(countryc)

    def cityChoice(self):
        cityc = input("Enter the name of the city: ")
        self.citychoice.append(cityc)

您可以看到我在def countryChoice(self):def cityChoice(self):中输入了内容 我想把它从类函数和主脚本中删除。

这就是我的主要剧本的相关部分目前的样子:

from requestnew import requestNew


if __name__ == '__main__':
    """Introducion"""
    print ("\nThis program lets you see a weather forecast for your choosen city.")
    rq = requestNew()


    while True:
        print("\nWhen you have typed in country and city, press 3 in the menu to see the weather forecast for your choice.\n")
        menu = input("\nPress 1 for country\nPress 2 for city\nPress 3 to see forecast\nPress 4 to exit\n")
        if menu == "1":
            rq.countryChoice()
        elif menu == "2":
            rq.cityChoice()

此时我的主语只是调用类函数,他们用输入完成工作。但是如何从课堂上输入输入信息。

正如您在我的班级中看到的那样,输入会附加到以下列表中:

def countryChoice(self):
    countryc = input("Enter which country your city is in(in english): ")
    self.countrychoice.append(countryc) #Here

如果我在主脚本中获得输入,是否仍然可以将输入添加到我班级的self.countrychoice.append(countryc)中?我需要能够这样做,因为在我的班级后面我正在使用像这样的列表项:

def forecastRequest(self):
    r = requests.get("http://api.wunderground.com/api/0def10027afaebb7/forecast/q/" + self.countrychoice[-1] + "/" + self.citychoice[-1] + ".json")
    self.data = r.json()

正如您在上面的代码中所看到的,我正在使用列表项self.countrychoice[-1] + "/" + self.citychoice[-1],这是为了为我的api获取正确的地址。

所以我的问题是,如何在不弄乱附加到列表的情况下将输入从类中输入到主脚本中?如果它甚至可能。

很抱歉,如果有任何解释或写不好的话。因为我是初学者,所以对我来说真的很困惑。

2 个答案:

答案 0 :(得分:2)

您需要从方法中返回一个值:

def countryChoice(self):
    countryc = input("Enter which country your city is in(in english): ")
    self.countrychoice.append(countryc)
    return countryc

在主脚本中,您可以选择国家/地区:

countryChoice = rq.countryChoice()

此外,您仍然可以通过访问rq.countrychoice从列表中获取所有值。相同的推理适用于cityChoicerq.citychoice

答案 1 :(得分:1)

要从外部访问对象的属性,除了使用对象变量而不是self之外,您可以采用与内部相同的方式进行操作。

例如,在课堂内,您可以这样做:

self.countrychoice[-1] + "/" + self.citychoice[-1]

在课外,实例存储在rq中,你可以这样做:

rq.countrychoice[-1] + "/" + rq.citychoice[-1]

同样,在您致电rq.forecastRequest()后,您可以rq.data访问数据。所以,你可以这样写:

while True:
    print("\nWhen you have typed in country and city, press 3 in the menu to see the weather forecast for your choice.\n")
    menu = input("\nPress 1 for country\nPress 2 for city\nPress 3 to see forecast\nPress 4 to exit\n")
    if menu == "1":
        rq.countryChoice()
    elif menu == "2":
        rq.cityChoice()
    elif menu == "3":
        rq.forecastChoice()
        for line in rq.data.splitlines():
            print(line)