使用Python中的变量创建一个类的实例

2024-04-28 08:28:58 发布

您现在位置: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(,...)时实例都不同,并且实例反映名称。


Tags: 实例方法函数name名称宠物玩具toy
3条回答

如果你还没有找到它,这里是Dive into Python's chapter on object-oriented programming

这里还有一些examples,滚动到BankAccount。


可以直接调用类来创建实例。参数被传递给__init__方法。

class Tamago(object):
    def __init__(self, name):
        self.name = name

imouto = Tamago('imouto')
oba = Tamago('oba')
oba.name # 'oba'
imouto.name # 'imouto'

您可以创建如下变量:

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.. 

根据您的编辑,我假设您将类名作为字符串,并希望实例化该类?把字典当作调度员就行了。

class Foo(object):
    pass

class Bar(object):
    pass

dispatch_dict = {"Foo": Foo, "Bar": Bar}
dispatch_dict["Foo"]() # returns an instance of Foo

相关问题 更多 >