2017-08-08 86 views
-1

抓一个实例的名称我有一个是建立像this`在一个类中的蟒蛇

class Vehicle: 
    def __init__(self, seats, wheels, engine): 
     self.seats = seats 
     self.wheels = wheels 
     self.engine = engine 

A类和我给出一个实例这样

porsche = Vehicle(2, 4, "gas") 

我所能不知道如何使用“保时捷”实例在屏幕上写出“__init__”部分中每个自我初始化的名称。

所需的输出是这样的句子:

"I have a Vehicle. It has seats, wheels, and an engine." 

座位在哪里车轮和发动机是从类的到来。

我取回车辆,并使用放入字符串这样的:

porsche.__class__.__name__ 

但对我的生活不能弄清楚如何让每一个self.对象

+2

类实例没有内部名称。如果你想要这样的东西,把它添加到你的'__init__'。 – kindall

+1

您的问题主体似乎与标题无关。 – user2357112

+0

对不起,我只是不知道如何提问。我不知道如何抓住名字(座位,轮子,引擎)并将它们用在字符串中 –

回答

1

你的问题好像是问你如何知道对象上的属性名称。对于简单物体(无插槽),则足以检查__dict__。所以像这样的东西开始:

def show(x): 
    return "I have a {}. It has {}".format(type(x).__name__, ", ".join(x.__dict__)) 

然后

>>> show(Vehicle(1, 1, 1)) 
'I have a Vehicle. It has seats, wheels, engine' 
1

您可以使用obj.__dict__访问实例的fields/members/data attributes

你在找这样的事吗?

class Vehicle: 
    def __init__(self, seats, wheels, engine): 
     self.seats = seats 
     self.wheels = wheels 
     self.engine = engine 

    def description(self): 
     # 'Vehicle' 
     name = self.__class__.__name__ 

     # ['seats', 'wheels', 'engine'] 
     field_names = self.__dict__.keys() 

     return "I have a %s. It has these fields: %s" % (
      name, ', '.join(field_names)) 


porsche = Vehicle(2, 4, "gas") 
print(porsche.description()) 

输出:

I have a Vehicle. It has these fields: engine, wheels, seats 

注意,这些字段名称会以任意顺序(类型的字典是Python中无序的),不一定是为了你__init__()定义它们。