在Python中创建和检索对象列表增强

时间:2010-08-25 12:47:25

标签: python

这篇文章是我上一篇文章的后续内容(在Python中创建和检索对象列表)。

我必须按以下方式修改我的代码:

SCRIPT1

#!/usr/bin/python

class Porsche:
    """ class representing a Porsche """
    def __init__(self, color):      
        self.color = color


def create_porsche(parameter_1, parameter_2):
    myPorsche = Porsche(color = parameter_1)
    myPorsche2 = Porsche(color = parameter_2) 

create_porsche(parameter_1 = 'blue', parameter_2 = 'red')
porsche_container = (myPorsche, myPorsche2)

我希望porsche_container =(myPorsche,myPorsche2)的工作方式与我之前的脚本相同:

旧脚本1

#!/usr/bin/python

class Porsche:
    """ class representing a Porsche """
    def __init__(self, color):      
        self.color = color


myPorsche = Porsche(color = 'blue')
myPorsche2 = Porsche(color = 'red') 


porsche_container = (myPorsche, myPorsche2)

我该怎么办呢?

RGDS,

2 个答案:

答案 0 :(得分:1)

create_porsche不会返回任何内容,因此您不知道它是创建了什么。让它返回它创建的汽车列表,然后您可以将其存储在全局变量中。

def create_porsche(parameter_1, parameter_2):
    myPorsche = Porsche(color = parameter_1)
    myPorsche2 = Porsche(color = parameter_2) 

    return [ myPorsche, myPorsche2 ]

porsche_container = create_porsche(parameter_1 = 'blue', parameter_2 = 'red')

您上面发布的代码不起作用的原因是变量myPorschemyPorsche2是在函数create_porsche中定义的,因此它们是作用域到那个功能。这意味着您无法在该代码块之外查看或访问它们。如果您想了解它们,请让create_porsche返回它们。 (注意:可以告诉Python它们应该是全局变量,即不在函数范围内 - 使用global关键字 - 但除非必须,否则不应该这样做。)


我不是故意在这里粗鲁,但你读过任何Python教程吗?像Dive Into Python这样的东西可能会帮助你理解像这样的东西(函数范围和返回值)。

答案 1 :(得分:0)

以下是我如何创建Porsche个对象并将其添加到容器中的方法。

class Porsche(object):
    def __init__(self, color):
        self.color = color

class PorscheCreator(object):
    def __init__(self):
        self._cars = []
    def create(self, *args, **kwargs):
        porsche = Porsche(*args, **kwargs)
        self._cars.append(porsche)
        return porsche
    def _get_cars(self):
        for each in self._cars:
            yield each
    cars = property(_get_cars)

creator = PorscheCreator()
myPorsche = creator.create('blue')
myPorsche2 = creator.create('red')     

在剧本2中:

from script1 import creator

for each in creator.cars:
     print car.color