самооценка против себя - PullRequest
0 голосов
/ 27 апреля 2020

В чем разница между self.value и просто self при использовании внутри add и radd методов класса. это выдает мне ошибку типа, когда я использую self.value внутри radd , но он просто отлично работает в add методе, как это отличается

class Numstring:

    def __init__(self, value):
        self.value = str(value)

    def __int__(self):
        return int(self.value)

    def __add__(self, other):
        return int(self) + other

 #  def __add__(self, other):
 #      return int(self.vaue) + other**

    def __radd__(self, other):
        return self + other

 #  def __radd__(self, other):
 #      return self.vaue + other 

foo = Numstring(5)

# working when using both self.value and self
add = foo + 4  

#not working when using self.value in __radd__ (but
#working when using only self what is the difference)
add2 = 4 + foo 

print(add)
print(add2)

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Кажется, в вашем примере есть какая-то ошибка опечатки, например self.vaue, а не self.value

. Self будет обращаться к экземпляру класса, self.value - к определенному вами свойству класса.

0 голосов
/ 27 апреля 2020

Если вы используете self + other, то он вызывает self.__add__(other), где вы используете int(self.value) + other, что кажется правильным, поскольку self.value имеет тип str. Однако если в __radd__ вы используете self.value + other, то вы пытаетесь добавить str и int, что дает TypeError. Если бы вы также использовали int(self.value) + other, это бы сработало. Обратите внимание, что вы можете опустить определение __radd__, если оно похоже на __add__, так как оно откатится на него (если операнд lhs его не поддерживает).

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