gpt4 book ai didi

Python - 如何创建在 __init__ 期间可配置的不可变类成员

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:22 26 4
gpt4 key购买 nike

我想创建一个类成员,它可以由构造函数分配一个用户指定的值,但之后无法更改。有办法做到这一点吗?

到目前为止,我已经得到了以下代码,大部分都可以工作,但不是“白痴证明”。

def constantify(f):
def fset(self, value):
raise SyntaxError ('Not allowed to change value')
def fget(self):
return f(self)
return property(fget, fset)

class dummy(object):
def __init__(self,constval):
self.iamvar = None
self._CONST = constval

@constantify
def SOMECONST(self):
return self._CONST


dum = dummy(42)
print 'Original Val:', dum.SOMECONST

这会打印“Original Val: 42”

dum.SOMECONST = 24 

这给出了正确的 SyntaxError

但是,输入一个白痴,

dum._CONST = 0
print 'Current Val:', dum.SOMECONST

给出“当前值:0”

是否有更好的防白痴方式来实现这一目标?

或者可初始化但之后保持常量的类成员在某种程度上不是“pythonic”方式? (我仍然是一个学习 pythonic 方式的新手)在那种情况下,创建一个类的 pythonic 方法是什么,每个实例仅在实例化时是“可配置的”?

卡尔皮特

更新:我不想创建一个所有成员都是不可变的类。我只希望一些成员保持不变,而其他成员随时可变。

最佳答案

我能想到的最简单的方法是覆盖 __setattr__并在设置特定属性时引发错误,就像这样

class dummy(object):
def __init__(self, arg):
super(dummy, self).__setattr__("data", arg)

def __setattr__(self, name, value):
if name == "data":
raise AttributeError("Can't modify data")
else:
super(dummy, self).__setattr__(name, value)

a = dummy(5)
print a.data
# 5
a.data = "1"
# AttributeError: Can't modify data

关于Python - 如何创建在 __init__ 期间可配置的不可变类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23557667/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com