【问题标题】:Making a variable immutable in Python在 Python 中使变量不可变
【发布时间】:2019-11-04 21:20:58
【问题描述】:
class Foo(float):
   ...

C = Foo(1.23)

给定这样的类/obj 定义,我有什么办法可以使 C 成为只读的吗?如果在初始化对象 C 之后调用了 C = ...,我希望它会引发错误。

【问题讨论】:

  • “不可变”是什么意思?您的意思是更改名称C 所指对象的状态吗?还是您的意思是重新分配名称 C 以引用不同的值?
  • @Code-Apprentice 重新分配名称 C
  • 不,没有办法阻止在 Python 中重新分配名称。
  • @CaitLANJenner 不完全是,那是在谈论在 C 处更改对象中的属性,我想要它以便名称 C 不能重新分配

标签: python class immutability


【解决方案1】:

这是不可能的。您可以使 Foo 对象不可变,但不能使引用它的变量不可变。该对象不拥有该变量或对其进行任何控制。

【讨论】:

    【解决方案2】:

    没有。

    无论您分配给C 什么,C 本身都不是您创建的任何类的实例。 C 是一个变量。对变量进行操作的操作,如C = something_new,甚至不查看您的对象,除非减少引用计数。您可以定义对对象的操作的行为方式,但不能重新定义变量本身的语义。

    【讨论】:

    • 那么我能不能让它在 refcount 减少时产生错误?
    • @OwenMehta-Jones 你不能不破解解释器本身。
    • @juanpa.arrivillaga 这是一个很大的 F 但我还是试试吧。
    • @OwenMehta-Jones:引用计数一直在上升和下降。即使您可以在对象的引用计数下降时引发错误,这样做也会使您的对象完全无法使用。它就像一个世界末日装置,只要有人停止看它(或在看它时眨眼),它就会熄灭。
    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多