“朋友”在python中的类

时间:2011-06-14 03:51:47

标签: python class inheritance friend

有没有办法让类中的某些变量“私有”(或者其他self.__var)但是可以被其他类访问,比如c ++中的朋友,除了在python中?我不希望任何一个类中的变量被搞乱。我也不想复制整个代码并将其转换为第二类。

4 个答案:

答案 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'