【发布时间】:2017-03-24 10:07:06
【问题描述】:
如果我有这样的课程
class foo():
def __init__(self, value = 0):
self.__value = value
def __set__(self, instance, value):
self.__value = value
def calc(self):
return self.__value * 3
def __repr__(self):
return str(self.__value)
我现在可以创建类 foo 的变量并使用它的函数。
n = foo(3)
print(n.calc())
那里没有问题,但如果我继续这样做。
n = 5
print(n.calc())
我会得到一个错误,因为我现在将 n 设置为一个值为 5 的 int 对象,因此没有 calc() 函数。
我通常使用 C++,所以我很困惑,因为我认为 __set__ 函数应该覆盖 = 运算符,然后将 __value 设置为 5就像我要使用
operator=(int value)
在 C++ 中,我寻找过解释,但没有找到任何解释。
感谢所有帮助。
【问题讨论】:
-
简单地说:你不能这样做,正如你所看到的。继续使用真正有效的策略。
-
@TigerhawkT3 我认为问题不是关于扩展 int,而是关于为什么
__set__不能按预期工作。 -
@TigerhawkT3 正如 Pidgey 建议的那样,我在问为什么 _set_ 不像我最初想象的那样工作。其次,我认为您将我的问题标记为重复是不公平的,因为与我的示例相比,您的两个示例的措辞方式截然不同。当我的措辞如此不同时,应该如何找到这些问题,我知道“标记为重复”按钮在赋予您这种权力时可能非常诱人,但请仔细考虑。
-
没有人说你应该找到其他问题。关闭不是惩罚。
-
@TigerhawkT3 公平点。
标签: python class operator-overloading