2011-11-27 44 views
1

非標準類型如何,例如我會轉換類型從一些外部類到另一個?我搜索了周圍,並得到像「int到字符串」和東西的東西,但我正在談論像類「瓦」轉換爲其他東西,如「瓦2」的東西。型鑄造與蟒蛇

+2

你能給出你正在嘗試做一個例子嗎? –

回答

1

正如Daniel在他的回答中所提到的,由於Python的代碼通常是(應該)寫入的,所以在Python中不需要進行轉換。然而,您可能需要的是在非標準類型之間轉換。

轉換應該可能在你想要轉換的類內的__init__方法內支持,如果你想以這種方式轉換爲例如。 intstrlist等:

class Tile: 
    def __init__(self, val): 
     # here paste the code making Tile object out of other objects, 
     # possibly checking their types in the process 
     pass 

,然後你應該能夠投它像(調整__init__您的需求後):

spam = Tile(ham) 

更全面例如對於類型之間轉換:

>>> class AmericanTile: 
    def __init__(self, val=None): 
     if isinstance(val, str): 
      self.color = val 
     elif isinstance(val, BritishTile): 
      self.color = val.colour 


>>> class BritishTile: 
    def __init__(self, val=None): 
     if isinstance(val, str): 
      self.colour = val 
     elif isinstance(val, AmericanTile): 
      self.colour = val.color 


>>> a = AmericanTile('yellow') 
>>> a.color 
'yellow' 
>>> b = BritishTile(a) 
>>> b.colour 
'yellow' 

它回答你的問題嗎?

+0

是的,這足夠有道理!謝謝。 – SuperDisk

3

有沒有這樣的事情在Python鑄造。這是因爲沒有必要爲它:通常,接受一個「瓦」對象的函數不應該關心它實際上一個tile而非tile2,只要它具有數據和/或方法,它是期待。這被稱爲duck typing,並且是像Python這樣的動態類型語言編程的基礎部分。

當然,有可能從轉換從一個類到另一個類,但沒有通用的方式來做到這一點。你tile/tile2類必須實現這個自己,可能是通過複製過來的數據元素。

+0

+1 - 在鴨子打字的背景下鑄造並沒有什麼意義。 –