有没有办法让类中的某些变量“私有”(或者其他self.__var
)但是可以被其他类访问,比如c ++中的朋友,除了在python中?我不希望任何一个类中的变量被搞乱。我也不想复制整个代码并将其转换为第二类。
答案 0 :(得分:17)
不,没有这样的选择。
使用以单个下划线开头的名称,并告诉处理项目的其他人不要对他们访问的内容愚蠢。
答案 1 :(得分:7)
Python的哲学是访问控制等问题取决于程序员的纪律。它不会尝试使用语言编写程序的哪些部分是内部实现细节,哪些是文档化界面的一部分。因此,它不需要像friend
这样的结构来尝试声明程序的哪些其他部分是类的实现的一部分,而仅仅是客户端。
这个想法是,如果你不能编写/设计/记录/使用好的代码而不将这些概念部分地编码到程序中,那么当你对它们进行编码时,你可能无法做到。因此,最好不要在语言中使用这样的结构,因为它们不会增加语言的表达能力,偶尔也会妨碍语言。
答案 2 :(得分:1)
我不知道你在说什么。
>>> class Foo(object):
... __bar = 42
...
>>> class Quux(object):
... def spam(self):
... print Foo._Foo__bar
...
>>> q = Quux()
>>> q.spam()
42
答案 3 :(得分:0)
python 中没有友元函数选项。 您可以选择使用单个下划线来定义受保护的变量, 但是在python中受保护的变量也被main函数访问,但这并不完全是受保护变量的定义,看看吧。
class Student:
_schoolName = 'XYZ School' # protected class attribute
def __init__(self, name, age):
self._name=name # protected instance attribute
self._age=age # protected instance attribute
std = Student("Swati", 25)
std._name
#answer is ->'Swati'
std._name = 'Dipa'
std._name
#answer is ->'Dipa'