Приведение типов с нестандартными типами в python - PullRequest
1 голос
/ 28 ноября 2011

Как, например, преобразовать тип из какого-то внешнего класса в другой? Я искал и получал такие вещи, как "int to string" и прочее, но я говорю о чем-то вроде класса "tile", преобразующемся во что-то другое, например, "tile2".

Ответы [ 2 ]

3 голосов
/ 28 ноября 2011

Нет такой вещи, как приведение в Python. Это потому, что в этом нет необходимости: как правило, любая функция, которая принимает объект «плитки», не должна заботиться о том, что он на самом деле равен a tile, а не tile2, если он имеет данные и / или методы, которые он ожидает. Это называется утиной типизацией и является фундаментальной частью программирования на языке с динамической типизацией, таком как Python.

Конечно, можно конвертировать из одного класса в другой, но нет никакого общего способа сделать это. Ваши tile / tile2 классы должны будут реализовать это сами, возможно, путем копирования элементов данных.

1 голос
/ 28 ноября 2011

Как сказал Даниэль в своем ответе, приведение не обязательно в Python из-за того, как обычно пишется код для Python.Однако вам может понадобиться преобразование между нестандартными типами .

. Преобразование, вероятно, должно поддерживаться в методе __init__ в классе, в который вы хотите его преобразовать, если хотитесделать так, как работает конвертация, например.int, str, list и т. Д.: * 10101 *

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'

Отвечает ли он на ваш вопрос?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...