所以我有这段代码:
class vehicle(object):
def __init__(self):
self.age = 6
self.make = 8
self.colour = 'colour'
self.cost = 'cost'
class car(vehicle):
def __init__(self):
vehicle.__init__(self)
self.type = 'car'
car1 = car()
print car1.make, car1.colour, car1.cost, car1.type, car1.age
n = raw_input()
dic = {'name' : n}
dic['name'] = car()
print dic['name'].make
在最后一点,我能够解决我之前的一个问题:创建一个汽车类的实例,其名称是用户在n中输入的一个
现在,我想要让用户输入一个名字,现在我必须找到班级'具有该名称的实例。
例如,如果在某一点创建了名为car2的实例。现在,用户想要获取有关car2的信息并输入' car2'。如何使用此输入来访问名为car2的实例的属性?
我试过了:
a = raw_input()
dic['fetch'] = a
dic['fetch'].make
不起作用。
答案 0 :(得分:1)
在我看来,你有一些误解。将输入分配到字典中的方式没有意义。您的描述表明您需要一个将“名称”映射到汽车描述的字典。
您最初创建的字典已关闭。您目前正在进行此操作的方式,实际上您在分配汽车数据时会丢失用户输入的名称。一些更好的变量命名可能对您有所帮助。像这样创建你的字典:
cars_by_name = dict()
name = raw_input()
cars_by_name[name] = car()
所以现在你有一个名字(由用户给出)映射到汽车描述。
现在您需要再次获取相同的car
实例。您可以使用名称作为字典中的键来执行此操作:
name2 = raw_input()
print cars_by_name[name2].make
接下来,让我们来看看你的课程。我的第一个问题:为什么你需要一个vehicle
和一个car
课程?如果你永远不会有继承car
的{{1}}之外的其他课程,那么你真的不需要它们。即使你计划有更多的子类,我仍然可能会建议不要在这里继承。您的vehicle
没有行为(方法)来继承子类。它只是一个数据对象。在Python中强烈鼓励duck typing,从没有方法的类继承并不会给你带来任何好处。 (基类会用方法给你带来的是你只需要在一个地方定义方法,以便以后更容易修改。)特别是在你的情况下,似乎没有任何创造动机一个子类。所有车辆的单一班级都可以正常使用。所以让我们简化你的课程:
vehicle
(另外,请注意,类名通常在Python中以驼峰形式给出。)现在还有一个问题:这些常量。并非所有class Vehicle(object):
def __init__(self):
self.age = 6
self.make = 8
self.colour = 'colour'
self.cost = 'cost'
self.type = 'car'
都具有相同的值;事实上,大多数人不会。所以让我们让它们成为初始化器的参数:
Vehicle
然后你创建一个这样的:
class Vehicle(object):
def __init__(self, age, make, colour, cost, type):
self.age = age
self.make = make
self.colour = colour
self.cost = cost
self.type = type
祝你学习愉快。希望这会有所帮助。
答案 1 :(得分:0)
如果我理解正确并且您想将字符串名称映射到实例:
n = raw_input()
dic = {n: car()}
print dic[n].make
print(dic)
dic[n].cost = 10000
print(dic[n].cost)
另一个选择是为每个汽车实例取一个名称,并有一个类属性dict将名称映射到self。
In [13]: paste
class vehicle(object):
def __init__(self):
self.age = 6
self.make = 8
self.colour = 'colour'
self.cost = 'cost'
class car(vehicle):
dic = {}
def __init__(self, name):
vehicle.__init__(self)
car.dic = {name: self}
self.type = 'car'
self.name=name
car1 = car("car1")
car2 = car("car2")
car2.colour="blue"
print car1.make, car1.colour, car1.cost, car1.type, car1.age
n = raw_input()
print car.dic[n]
print car.dic[n].make
print car.dic[n].colour
## -- End pasted text --
8 colour cost car 6
car2
<__main__.car object at 0x7f823cd34490>
8
blue