【问题标题】:Python, set class variable to int value not int type [duplicate]Python,将类变量设置为int值而不是int类型[重复]
【发布时间】: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


【解决方案1】:

here所述。

以下方法仅适用于类的实例 包含方法(所谓的描述符类)出现在 所有者类(描述符必须在所有者的类中 字典或在其父母之一的类字典中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多