Почему Python int имеет метод __round__? - PullRequest
0 голосов
/ 07 января 2020

В чем причина того, что у типов int есть метод __round__, связанный с ними, когда округление целых чисел не имеет никакого смысла?

>>> int.__round__
<method '__round__' of 'int' objects>

Ответы [ 3 ]

4 голосов
/ 07 января 2020

Вы также можете округлять целые числа (например, от 8 до 10).
В Python округление возможно только при наличии метода __round__.

Вот краткий пример чтобы объяснить это в коде:

>>> int(round(5678,-1))
5680
>>> int(round(5678,-2))
5700
>>> int(round(5678,-3))
6000

Вместо этого вы не можете округлить строку, потому что у нее нет метода __round__.

Методы с именами, которые имеют как начальные, так и конечные двойные подчеркивания зарезервированы для специального использования в языке.
Это правило охватывает такие вещи, как __init__ для конструкторов объектов или __call__ для обеспечения возможности вызова объекта, такие имена в качестве начальных и конечных двойных подчеркиваний также называются «лишними».

1 голос
/ 07 января 2020

Во-первых, эта функциональность была реализована в Python3 (не существует в Python2).

Python2:

>>> int.__round__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'int' has no attribute '__round__'

Python3:

>>> int.__round__
<method '__round__' of 'int' objects>

Метод «округления» использовался для округления числа по длине (сумме) предоставленный второй номер:

пример:

>>> int(round(4485,-2))
4500
>>> int(round(4485,-1))
4480
>>> int(round(4485,0))
4485
0 голосов
/ 07 января 2020

Как число, мы должны быть в состоянии округлить его, и в Python это возможно только тогда, когда класс объекта имеет round функцию с ним. Контрпримером является str.

>>> s = 'my_str'

>>> type(s)
<class 'str'>

>>> dir(s)
['__add__', '__class__', '__contains__', ...
# to show there is no __round__ function for str

>>> round(s)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: type str doesn't define __round__ method```

. Он очень похож на trait или interface в языках JVM.

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