@atsin4469

Всегда ли методу нужны скобки?

Для s = 'ABCDE' код s.lower и s.lower() дает одинаковый вывод.
В таком случае есть ли смысл в скобках?
  • Вопрос задан
  • 116 просмотров
Решения вопроса 4
firedragon
@firedragon
Senior .NET developer
Как по мне скобки дают четкое понятие что это метод и вот сейчас он вызывается.
Ответ написан
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Через точечку - это атрибуты экземпляра какого-либо класса. Атрибут может быть либо параметром (как переменная или константа, только относящаяся к конкретному экземпляру, его собственный параметр), либо методом (встроенный инструмент, персональная функция экземпляра, позволяющий менять значения некоторых параметров экземпляра, либо ещё что-нибудь делать с этим экземпляром).

Так вот - если через точечку у нас параметр, содержащий некоторое значение, то обратиться к нему нужно без скобочек. А если это метод, функция, то как всякая функция он вызывается со скобками, в скобках могут указываться обязательные и не обязательные аргументы функции.

То, что в вашем случае вывод одинаков, ничего не говорит о том, можно ли скобки использовать или не использовать. Это лишь внешне похожие проявления довольно различных процессов. Сейчас они похожи на выходе, но никто не гарантирует без тщательного анализа, что и дальше будет так же.
Без скобок вы получаете значение. Со скобками - результат работы функции.
Ответ написан
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Не всегда. Скобки нужны чтобы вызвать метод.
s = 'HELLO'
print(s.lower)
print(s.lower())

<built-in method lower of str object at 0x7fd8f2702530>
hello


Скобки не нужны, если функцию передавать в качестве параметра.
Ответ написан
@alegzz
s = 'ABCDE'
lower = s.lower
print(lower)
print(lower())


вывод:

abcde

делаем выводы: s.lower возвращает объект, а s.lower() возвращает результат работы функции.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@dmshar
"дает одинаковый вывод" - а как вы это проверяли???
s = 'ABCDE'
print(s.lower())
print(s.lower)

Результат:
abcde
<built-in method lower of str object at 0x00000201495A68B0>

Более того, попробуйте посмотреть, что за объекты вы получите:

a=s.lower()
b=s.lower


Коротко говоря - s.lower - это создание функции:

b=s.lower
b()


Результат:
'abcde'
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы