使用用户输入访问类实例的属性

时间:2015-01-11 20:53:53

标签: python input instance

所以我有这段代码:

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

不起作用。

2 个答案:

答案 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