我想从一组给定的字符串动态地创建多个类实例(复制的),然后就被它卡住了。你知道吗
我的方法是:
# -*- coding: utf-8 -*-
# I have an number of different classes
class FourLegs:
def __init__(self, name, age):
self.name = name
self.age = age
class TwoOrNoLegs:
def __init__(self, name, age):
self.name = name
self.age = age
# And only the class name and some attributes (normally in a big CSV file)
dc = dict(zip(range(0, 5), [('FourLegs', 'Dog', 11),
('TwoOrNoLegs', 'Chicken', 22),
('FourLegs', 'Cat', 33),
('FourLegs', 'Mice', 44),
('TwoOrNoLegs', 'Snake', 55)]))
# And want to create different objects depending on the given class name
# and attributes an store them in a dict
zoo = {}
for k, v in dc.items():
an = eval(v[0])
an.name = v[1]
an.age = v[2]
print(an, an.name, an.age)
zoo[an.name] = an
for k, v in zoo.items():
print(k, v.name, v.age)
它提供:
<class '__main__.FourLegs'> Dog 11
<class '__main__.TwoOrNoLegs'> Chicken 22
<class '__main__.FourLegs'> Cat 33
<class '__main__.FourLegs'> Mice 44
<class '__main__.TwoOrNoLegs'> Snake 55
Snake Snake 55
Mice Mice 44
Dog Mice 44
Cat Mice 44
Chicken Snake 55
因为我使用的是(eval()),它似乎只创建实例的引用(没有副本)。你知道吗
我想要产生的结果(如果我手动创建实例,它就可以工作)如下:
<class '__main__.FourLegs'> Dog 11
<class '__main__.TwoOrNoLegs'> Chicken 22
<class '__main__.FourLegs'> Cat 33
<class '__main__.FourLegs'> Mice 44
<class '__main__.TwoOrNoLegs'> Snake 55
Snake Snake 55
Mice Mice 44
Dog Dog 11
Cat Cat 33
Chicken Chicken 22
我真的被困在这里了,我很高兴得到每一个提示!你知道吗
对于基于字符串的动态创建的实例,是否也有方法实现这一点?你知道吗
您没有创建实例,而是直接在类上设置属性。因为您每次都在改变相同的两个类上的属性,所以您会看到最后一组值反映在这两个类的属性中。你知道吗
呼叫您的班级,输入姓名和年龄:
你应该尽量避免在这里使用
eval()
;把你的类放在一个字典里并用它作为查找,或者使用globals()
字典(但是要注意,这样也可以调用其他全局变量):相关问题 更多 >
编程相关推荐