2011-11-27 45 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 - 在鸭子打字的背景下铸造并没有什么意义。 –