我之前发过this question,但不是很清楚,我的答案也有问题。由于我编辑它以使人们更有意义,似乎人们没有看到它,也许是因为他们看到它已经有6个答案。所以我在这里重新发送信息:
我一般都是Python和编程的新手,所以我需要简单的解释!我甚至都不知道你所说的这本字典是什么!
我正在为我的妹妹创造一个游戏。这是一种虚拟宠物,宠物可以玩玩具。
我创建了一个类Toy
,并希望创建一个函数getNewToy(name, data1, data2, data3, data4, data5)
。
我希望此函数创建类Toy
的新实例,并且我希望每次创建新实例时都能够多次调用该函数。
根据我的经验,您使用以下命令创建实例:
class Toy:
def __init__(self, name, data1, data2, data3, data4, data5):
pass
myToy = Toy(myToy, 1, 2, 3, 4, 5)
然后使用类中的方法:
myToy.method1()
看到我希望能够拥有多个玩具,每个玩具都有一个playWith()
方法,我希望实例在每次调用时都反映Toy
的名称。
每次调用方法getNewToy(,...)
和实例来反映名称时,我希望实例不同。
请记住我是编程新手,所以你能解释一下吗。
非常感谢,现在更容易理解!
答案 0 :(得分:2)
制作特殊的getNewToy函数毫无意义。只需创建类:
newtoy = Toy(name, data1, data2, data3, data4, data5)
这就是你需要做的一切。
“方法我希望实例在每次调用时反映玩具的名称。”
class Toy:
def __repr__(self):
return "<type Toy name=%s>" % self.name
答案 1 :(得分:2)
下面我将如何做你解释的内容:
# The following two classes are toys, both have a playWith
# as you wanted, each playWith do different things
class Ball:
def __init__(self):
self.name = "ball"
def playWith(self):
print "the ball bounces"
class Car:
def __init__(self):
self.name = "car"
def playWith(self):
print "the car is fast"
# This is a Python generator, every time .next() is called on it,
# the next "yield-value" is returned
def generator():
while True:
yield Ball()
yield Car()
# This is the creator, it has to be a class rather than a function
# since you wanted a new toy each time getNewToy is called
# and as such the generator needs to be tracked
class ToyCreator:
def __init__(self):
self.generator = generator()
def getNewToy(self):
return self.generator.next()
# Create five toys, print their name and play with them
# Do note here that even though we ask for five toys but only have
# two "yields" in the generator, the generator "wraps around" (since,
# internally, its just an endless loop)
toyCreator = ToyCreator()
for i in range(5):
toy = toyCreator.getNewToy()
print "Toy",i,toy.name,"\t:",
toy.playWith()
如果您无法理解收益业务,请查看documentation for the python generator。
您要做的是实施design pattern,factory pattern更准确。
仍然感到困惑?再读一遍,想一想,但不要犹豫。在这里提供帮助。 :)
答案 2 :(得分:1)
我不明白为什么你需要getNewToy
方法。每次拨打Toy()
,您都会获得班级的新实例。你可能想要这样的代码:
class Toy:
def __init__(self, name, data1, data2, data3, data4, data5):
self.name = name
self.data1 = data1
# ...
myToy = Toy("firsttoy", 1, 2, 3, 4, 5)
myToy2 = Toy("2ndToy", 6, 7, 8, 9, 10)
答案 3 :(得分:0)
也许您将始终拥有5个数据项,但即使如此,请考虑使用* args:
class Toy:
def __init__(self, name, *args):
self.name = name
self.data = args