Python 使用For循环创建对象

Python 使用For循环创建对象,python,list,loops,object,variables,Python,List,Loops,Object,Variables,首先,我很抱歉,因为我不太确定如何用Python语法来表达这个查询。我今天刚开始学习它,我的背景主要是基于PowerShell的 我目前正试图在谷歌云中获取我们组织内的项目列表。我想在两列中显示此信息:项目名称和项目编号-本质上是一个对象。然后我希望能够查询对象,说:如果项目名称是“X”,给我项目编号 然而,我在创建上述对象时遇到了相当大的困难。我的代码如下: import os from pprint import pprint from googleapiclient import disc

首先,我很抱歉,因为我不太确定如何用Python语法来表达这个查询。我今天刚开始学习它,我的背景主要是基于PowerShell的

我目前正试图在谷歌云中获取我们组织内的项目列表。我想在两列中显示此信息:项目名称和项目编号-本质上是一个对象。然后我希望能够查询对象,说:如果项目名称是“X”,给我项目编号

然而,我在创建上述对象时遇到了相当大的困难。我的代码如下:

import os
from pprint import pprint
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials

credentials = GoogleCredentials.get_application_default()
service = discovery.build('cloudresourcemanager', 'v1', credentials=credentials)

request = service.projects().list()
response = request.execute()
projects = response.get('projects')
“projects”变量似乎是一个列表,而不是一个我可以浏览和运行查询的对象。我试过做一些事情,比如:

pprint(projects.name)
projects.get('name')
两者都返回错误: “AttributeError:'list'对象没有属性'name'”

我还研究了在For循环中创建一个类,它几乎满足了我的需求,但一次只显示一个项目名称和项目编号,而不是我可以查询的整个集合:

projects=[]
for project in response.get('projects', []):
    class ProjectClass:
        name = project['name']
        projectNumber = project['projectNumber']
    projects.append(ProjectClass.name)
    projects.append(ProjectClass.projectNumber)
我想,如果我把每个类都存储在一个列表中,它可能会工作,但唉,没有这样的乐趣!也许我需要在类变量中有For循环


在此方面的任何帮助都将不胜感激

正如@Code学徒在一篇评论中提到的,我认为您缺少对面向对象编程的关键理解,即类和对象之间的区别。将类视为创建对象的“蓝图”。例如,您的类ProjectClass告诉python ProjectClass类型的对象将有两个字段,name和projectNumber。然而,ProjectClass本身只是蓝图,而不是对象。然后,您需要创建ProjectClass的实例,您希望这样做:

project_class_1 = ProjectClass()
很好,现在您有了一个ProjectClass类型的对象,它将有字段name和projectNumber,您可以这样引用它们:

project_class_1.name
project_class_1.projectNumber
但是,您会注意到,您创建的类的所有实例的name和projectNumber的值都相同,这是不行的!我们需要能够在创建每个实例时指定值。输入init(),这是一种特殊的python方法,通俗地称为构造函数。当我们如上所述创建类的新实例时,python会自动调用该函数,并负责设置该类的所有字段。类和对象的另一个强大功能是,您可以定义可以随意调用的不同函数的集合

class ProjectClass:
    def __init__(self, name, projectNumber):
        self.name = name
        self.projectNumber = projectNumber
好多了。但是等等,那个自变量是什么?就像之前我们可以通过“project_class_1”变量名引用实例的字段一样,我们需要一种在运行作为实例一部分的函数时访问实例字段的方法,对吗?进入自我。Self是另一个python内置参数,它包含对正在访问的ProjectClass的当前实例的引用。这样,我们可以在类的实例上设置字段,这些字段将保持不变,但不会被ProjectClass的其他实例共享或覆盖。重要的是要记住,传递给类上定义的任何函数的第一个参数始终是self(除了一些现在不需要担心的边缘情况)

因此,重新构造代码时,您会遇到如下情况:

class ProjectClass:
    def __init__(self, name, projectNumber):
        self.name = name
        self.projectNumber = projectNumber

projects = []
for project in response.get('projects', []):
    projects.append(ProjectClass(project["name"], project["projectNumber"])

希望我已经很好地解释了这一点,并给了你一个完整的答案,说明了所有这些部件是如何组合在一起的。希望您能够自己编写代码,而不仅仅是给出答案

我建议你。特别是,您需要了解如何创建类的实例和
\uuuu init\uuu()
方法。请注意,在
for
循环中定义类是非常罕见的。通常,
声明在全局范围内。非常感谢您的详细回复!当然还有很多东西需要学习,特别是它与PowerShell有多么不同。我将很快阅读
\uuu str\uuu
\uuuu repr\uuu
来解密我从下面收到的对象输出:)