ТипError с эмулированным числовым типом [duplicate]

Один liner, но без String.format:

Color your_color = Color.BLACK;

String hex = "#"+Integer.toHexString(your_color.getRGB()).substring(2);

Вы можете добавить .toUpperCase(), если хотите перейти на заглавные буквы.

4
задан user1187139 3 February 2012 в 11:59
поделиться

2 ответа

__radd__ вызывается только в том случае, если у левого объекта нет метода __add__, или этот метод не знает, как добавить два объекта (которые он помещает, возвращая NotImplemented). Оба класса имеют метод __add__, который не возвращает NotImplemented. Поэтому метод __radd__ никогда не будет вызван.

14
ответ дан Mikhail 20 August 2018 в 10:42
поделиться
  • 1
    Ах, NotImplemented, это была именно та функциональность, которую я искал. Ницца – user1187139 4 February 2012 в 04:36

Эти функции __radd__ вызывается только в том случае, если левый операнд не поддерживает соответствующую операцию, а операнды имеют разные типы. Например,

class X:
  def __init__(self, num):
    self.num = num

class Y:
  def __init__(self, num):
    self.num = num

  def __radd__(self, other_obj):
    return Y(self.num+other_obj.num)

  def __str__(self):
    return str(self.num)

>>> x = X(2)
>>> y = Y(3)
>>> print(x+y)
5
>>>
>>> print(y+x)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-60-9d7469decd6e> in <module>()
----> 1 print(y+x)

TypeError: unsupported operand type(s) for +: 'Y' and 'X'
2
ответ дан Adil Abbasi 20 August 2018 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: