применение скобок после имени метода в классе Python - PullRequest
0 голосов
/ 03 марта 2020

Для простого примера в классе Python я хочу иметь метод, который удваивает число, заданное пользователем при запуске.
Метод выполняет свою работу или предназначается при использовании с круглыми скобками, но когда метод используется без скобок, он не выполняет удвоение числа, и основная проблема заключается в том, что интерпретатор не выдает ошибку или не жалуется.
предполагается, что пользователь ничего не ошибся и код выполняется ошибочно необнаруженным.
как переписать метод в классе (здесь «double ()»), чтобы заставить пользователя класса всегда ставить круглые скобки в конце, в противном случае возникает ошибка?!

>>> class Number(): 
         def __init__(self,number):  
           self.number = number  
         def double(self):  
           self.number = self.number * 2


>>> num = Number(10)  
>>> num.number  
10  
>>> num.double    ## method does nothing when used without parantheses, and it only shows a class method  
<bound method Number.double of <__main__.Number object at 0x03B04460>>  
>>> num.number    ## the number value has not changed  
10  
>>> num.double()   ## method does its purpose right  
>>> num.number     ## now the number has been doubled   
20  

Ответы [ 3 ]

1 голос
/ 03 марта 2020

Язык позволяет сослаться на метод, поэтому то, что вы спрашиваете, невозможно. Всегда допустимо делать num.double, потому что вы можете сохранить ссылку в переменной для последующего использования, например.

a = num.double
a()   # calling the method

В подобных случаях вы можете сделать это так, что вызов num.double на самом деле что-то делает, используя свойство декоратор.

 @property
 def double(self):
   self.number = self.number * 2

сейчас

n = Number(21)
n.double
print(n.number)
>>> 42

Но свойства больше используются для имитации атрибутов c. И кодировщику python, спотыкающемуся на этой конструкции, будет непросто разобраться с этим, так что я думаю, что лучше привыкнуть к соглашению ().

0 голосов
/ 03 марта 2020

Сконфигурируйте ваш текстовый редактор / IDE для автоматического добавления открывающих скобок, когда он обнаружит, что вы ввели / автозаполните имя атрибута, которое выглядит как имя функции.

Если редактор обнаружен неправильно, и вы действительно хотите работать с несвязанным методом / функциональным объектом, вы можете просто вернуться назад, чтобы удалить скобки; и если вы действительно хотите позвонить, вы можете добавить закрывающие скобки. Auto parens принимает явное решение, добавлять или не добавлять круглые скобки, и напоминает вам, что атрибут должен быть вызван, чтобы вступить в силу при редактировании, поскольку его нельзя легко пропустить.

0 голосов
/ 03 марта 2020

В python и во многих других языках вы используете круглые скобки для вызова функции, если вы не размещаете их, вы просто называете функцию, фактически не прося ее выполнить.

Пользователь не обязан это знать, поэтому существует метод ввода. Попробуйте что-то вроде этого:

number = int(input('write the number you want to double: '))
print(number*2)

или если вы хотите использовать свой код:

class Number(): 
         def __init__(self,number):  
           self.number = number  
         def double(self):  
           self.number = self.number * 2

number = int(input('write the number you want to double: '))
myNum = Number(number)
myNum .double()
print(myNum)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...