c++ - 如果我让类(class)成员公开怎么办?

标签 c++ python

在c++中实例变量默认是private的,在Python中变量默认是public的

我有两个关于相同的问题:-

1:为什么Python默认所有成员都是public的?

2:人们说您应该将您的成员(member)数据保密 如果我公开我的数据怎么办? 这种方法的缺点是什么? 为什么它是一个糟糕的设计?

最佳答案

您可以在名称中使用前导下划线来告诉代码的读者,有问题的名称是内部细节,他们不能依赖它保留在未来的版本中。这样的约定确实是您所需要的——为什么要用强制机制来权衡语言?

数据和方法一样,如果它们是您打算在未来支持的类设计 API 的一部分,则它们应该是公开的(命名时不带前导下划线)。在 C++ 或 Java 中,这不太可能发生,因为如果你想将数据成员更改为访问器方法,那你就不走运了——你将不得不破坏你的 API,并且该类的每个客户端都必须改变。

在 Python 和其他支持类似 property 构造的语言中,情况并非如此——您始终可以用透明调用访问器方法的属性替换数据成员,API 不会改变,客户端代码也没有。因此,在 Python 和其他具有类似 property 结构的语言中(我相信 .NET 语言就是这样,在源代码级别,但不一定在字节码级别),您不妨将数据公开当它是 API 的一部分并且当前不需要访问器时(如果需要,您始终可以将访问器方法添加到以后的实现版本中,而不破坏 API)。

所以这并不是一个普遍的 OO 问题,它是特定于语言的:给定的语言是否支持类似属性的构造。 Python 可以。

关于c++ - 如果我让类(class)成员公开怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2824579/

相关文章:

c++ - g++ 不编译某些嵌套模板

python - ValueError : Passed Tensor(. ..) 应该具有等于当前图形的图形属性

python - 在 Python 中使用 matplotlib 绘图时出现意外响应

Python:深度复制ast节点树

python - Flask 应用程序为 Flask Migrate 获取错误 "could not locate flask application. .....FLASK_APP environment variable"

python - 通过列(字符串)中的唯一元素分解 pandas 数据框并创建列联表?

c++ - 连续使用 while(cin >> input) 成功

c++ - 语义问题 "Attempt to use a deleted function"遇到使用 std::thread 用法编译 C++ 代码

c++ - 具体类的单独头文件 - C++

没有宏的 C++ 配置方法