self.value vs self

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了self.value vs self相关的知识,希望对你有一定的参考价值。

使用内部addradd类方法时self.value和just self之间的区别是什么。当我在radd中使用self.value时,它向我抛出类型错误,但在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)
答案

如果使用self + other,那么它将在使用self.__add__(other)的地方调用int(self.value) + other,这似乎是正确的,因为self.value的类型为str。但是,如果在__radd__中使用self.value + other,则尝试将strint相加,得到TypeError。如果您也使用int(self.value) + other,它将起作用。请注意,如果__radd__的定义与__add__相似,则可以忽略它的定义(因为l.h.s.操作数不支持它)。

另一答案

似乎您的示例中有一些拼写错误,例如self.vaue而不是self.value

self将处理类实例,self.value将处理您定义的类属性。

以上是关于self.value vs self的主要内容,如果未能解决你的问题,请参考以下文章

布隆过滤的代码

scikit-learn joblib 错误:多处理池 self.value 超出“i”格式代码的范围,仅适用于大型 numpy 数组

python实现双向链表

使用列表模拟队列操作

二叉树的构建

1.25 Python知识进阶 - 封装