【发布时间】:2011-06-27 04:16:04
【问题描述】:
我正在做一些分布式计算,其中几台机器在假设它们都具有各种类的相同版本的情况下进行通信。因此,使这些类不可变似乎是一个不错的设计。并不是说它必须阻止怀有恶意的用户,只是足够不可变,永远不会被意外修改。
我该怎么做呢?例如,如何实现一个元类,使使用它的类在定义后不可变?
>>> class A(object):
... __metaclass__ = ImmutableMetaclass
>>> A.something = SomethingElse # Don't want this
>>> a = A()
>>> a.something = Whatever # obviously, this is still perfectly fine.
替代方法也可以,例如接受一个类并返回一个不可变类的装饰器/函数。
【问题讨论】:
-
@porgarmingduod:请详细说明
immutable enough that it is never modified by accident的实际含义。谢谢 -
@eat:因为我正在创建一个系统,其中 instances 的类被神奇地分布,程序员可能会忘记实际的类不是。当变量在一些复杂的编码中被抛出时,如果有人试图将某些东西分配给不可变类,我希望抛出一个异常。至于
accident部分,我的意思是解决方案不必阻止白痴试图撬开解决方案的内部结构。 -
@eat:您的评论以“无冒犯”开头这一事实并不能减轻我认为您的
import this回答令人反感的事实。 -
@eat:这个问题有什么不明白的?不清楚我在问一种方法来分配/删除类中的属性会引发异常吗?我知道对于此类功能是否是正确的解决方案可能存在异议,但这不是问题的一部分。我可以写一个冗长的辩护词来解释我为什么这么认为。或者我可能会失败。但问题仍然是如何制作不可变的类。
标签: python immutability metaclass