2017-08-08 87 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__()定義它們。