gpt4 book ai didi

python - Python封装实例字段的方式

转载 作者:行者123 更新时间:2023-11-28 23:06:11 25 4
gpt4 key购买 nike

这是对 @property decorator 的使用吗?适合获得实例字段的良好封装?我试图实现 Foobar 类的客户端无法以任何方式为 Foobar 实例的字段 vel 分配任意值,事实上绕过了属性设置方法中定义的分配规则。

谢谢。

class Foobar(object):
def __init__(self):
self._vel = 0

@property
def vel(self):
return self._vel

@vel.setter
def vel(self, v):
self._vel = v if v > 0 else 0

该字段似乎封装得很好。

>>> foobar = Foobar()
>>> foobar.vel
0
>>> foobar.vel = -1
>>> foobar.vel
0
>>> foobar.vel = 1
>>> foobar.vel
1

最佳答案

您不能阻止用户绕过 python 中的任何内容。总有一种方法可以 monkeypatch/reflect/inspect 属性;没有对象沙盒支持。

在你的例子中:

>>> foobar._vel = -1

将完全绕过该属性并直接分配给真实属性。你根本无法阻止它。有一些方法可以让它变得更难,但如果用户真的愿意,可以分配,那有什么意义呢?

通常的方法似乎是依赖于您图书馆的用户是成年人并信任他们这一事实:

在文档中声明预期值的范围并要求用户遵循。如果他们不这样做,那是他们的错。

关于python - Python封装实例字段的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330438/

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