这篇文章是我上一篇文章的后续内容(在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,
答案 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')
您上面发布的代码不起作用的原因是变量myPorsche
和myPorsche2
是在函数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