创建一个不能从类外部更改实例属性的类的最方便方法是什么(您仍然可以获取值),因此可以self.var = v
在类内部调用方法,但不能ClassObject().var = v
在外部调用班的?
我试过弄乱,__setattr__()
但如果我覆盖它,则name
无法在__init__()
方法中启动该属性。唯一的方法是覆盖__setattr__()
和使用object.__setattr__()
,我目前正在这样做:
class MyClass(object):
def __init__(self, name):
object.__setattr__(self, "name", name)
def my_method(self):
object.__setattr__(self, "name", self.name + "+")
def __setattr__(self, attr, value):
raise Exception("Usage restricted")
现在这个解决方案有效,已经足够了,但我想知道是否有更好的解决方案。这个问题是:我仍然可以object.__setattr__(MyClass("foo"), "name", "foo_name")
从课堂外的任何地方打电话。
有没有办法完全防止将变量设置为类外的任何内容?
编辑:愚蠢的我没有提到我不是在property
这里寻找,你们中的一些人已经回答了它,但是这对我来说还不够,因为它会self._name
改变。