在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()
方法,所以我希望每次调用时,实例能反映出玩具的名字。
我希望每次调用 getNewToy(,...)
方法时,实例都是不同的,并且能显示出玩具的名字。
8 个回答
4
你可以这样创建变量:
x = 10
print(x)
或者这样:
globals()['y'] = 100
print(y)
现在我们来创建一个新类:
class Foo(object):
def __init__(self):
self.name = 'John'
你可以这样创建类的实例:
instance_name_1 = Foo()
或者这样:
globals()['instance_name_2'] = Foo()
接下来我们来创建一个函数:
def create_new_instance(class_name,instance_name):
globals()[instance_name] = class_name()
print('Class instance '{}' created!'.format(instance_name))
调用一个函数:
create_new_instance(Foo,'new_instance') #Class instance 'new_instance' created!
print(new_instance.name) #John
我们还可以写生成器函数:
def create_instance(class_name,instance_name):
count = 0
while True:
name = instance_name + str(count)
globals()[name] = class_name()
count += 1
print('Class instance: {}'.format(name))
yield True
generator_instance = create_instance(Foo,'instance_')
for i in range(5):
next(generator_instance)
#out
#Class instance: instance_0
#Class instance: instance_1
#Class instance: instance_2
#Class instance: instance_3
#Class instance: instance_4
print(instance_0.name) #john
print(instance_1.name) #john
print(instance_2.name) #john
print(instance_3.name) #john
print(instance_4.name) #john
#print(instance_5.name) #error.. we only created 5 instances..
next(generator_instance) #Class instance: instance_5
print(instance_5.name) #John Now it works..
12
如果你还没找到,这里有一个链接,里面有关于面向对象编程的内容,来自《Dive into Python》的章节:Dive into Python的面向对象编程章节。
这里还有一些更多的示例,你可以滚动到“BankAccount”那部分。
你可以直接调用一个类来创建一个实例。参数会传递给__init__
这个方法。
class Tamago(object):
def __init__(self, name):
self.name = name
imouto = Tamago('imouto')
oba = Tamago('oba')
oba.name # 'oba'
imouto.name # 'imouto'
25
根据你的修改,我猜测你是想把类名作为字符串,然后创建这个类的实例?你可以用一个字典来作为调度器。
class Foo(object):
pass
class Bar(object):
pass
dispatch_dict = {"Foo": Foo, "Bar": Bar}
dispatch_dict["Foo"]() # returns an instance of Foo