2015-08-20 50 views
0

新的Python,所以我承擔......確認類的實例,在函數返回值

考慮下面的函數(假設這裏引用的類被正確創建):

def next_scene(scene_name): 
    print scene_name 
    scenes = {'Chip_in_the_car': ChipCar(), 'Chip_in_the_studio': ChipInStudio(), 'Chip_mom_house': ChipMomHouse(), 'Chip_at_rehearsal': SickFuckingPuppies(), 'Death': Death()} 

    for key, value in scenes.iteritems(): 
     if scene_name == key: 
      print value 
      return value 

好,那麼這裏返回value如下:

<__main__.ChipCar object at 0x104503390> 

這是否意味着現在的ChipCar類的實例已實例還是僅僅將類作爲對象在內存中的位置返回?我如何使用這個函數來創建一個ChipCar類的實例?

感謝任何見解(相信這是一個noob問題)。

回答

1

是的,你有這個類的一個實例。您正在尋找的實例的默認__repr__返回值,其中包括模塊名稱,類名和表示爲十六進制的對象id()值。

你可以給你的類的定製__repr__方法來更改文本,它應該返回一個字符串調試時是非常有用的。例如:

>>> class ChipCar(object): 
...  def __repr__(self): 
...   return '{}() object, id => 0x{:x}'.format(type(self).__name__, id(self)) 
... 
>>> ChipCar() 
ChipCar() object, id => 0x1046c33d0 
+0

感謝您的解釋!這個十六進制表示究竟是什麼?所以現在意味着我可以將'value'作爲'ChipCar'類的實例使用,對嗎? – AdjunctProfessorFalcon

+1

@ Malvin9000:是的,你的價值是'ChipCar'和類定義可以使用的所有方法的一個實例。 'id()'值只是一個數字,用於區分這個實例和其他對象。在Python的CPython(默認)實現中,該數字恰好是內存地址,但其他實現可以使用不同的方法來生成該數字。請參閱['id()'函數文檔](https://docs.python.org/2/library/functions.html#id)。 –

+0

真棒,謝謝你 – AdjunctProfessorFalcon