宿迁网站,广州婚恋网站排名,重庆编程培训机构,优秀茶叶网站设计1 python类的伪私有属性__X
python类的伪私有属性#xff0c;是为了避免实例内的命名空间冲突。
1.1 变量名压缩__X
#xff08;1#xff09;描述#xff1a;python的class语句内#xff0c;开头有两个下划线#xff0c;但结尾没有两个下划线的变量名#xff0c;会自…1 python类的伪私有属性__X
python类的伪私有属性是为了避免实例内的命名空间冲突。
1.1 变量名压缩__X
1描述python的class语句内开头有两个下划线但结尾没有两个下划线的变量名会自动在原始变量名开头加上单下划线和类名。
2用途这样可以避免与同一层次中其它类创建的相同变量名项冲突。
3例子比如
MyClass类的变量名__X会自动变成_MyClass__X。
OthClass类的变量名__X会自动变成_OthClass__X。
4场景
如果类有可能要作为基类且类内变量可能和其他类同名此时变量要双下划线开头。
比如多重继承类一个类同时继承多个基类。
1.2 变量名压缩示例
未使用__X
没有使用双下划线开头变量同名变量被覆盖。 class C1:def m1(self):self.X8def m2(self):print(self.X)class C2:def m5(self):self.X梯阅线条def m6(self):print(self.X)class C3(C1,C2):passIC3()I.m1();I.m5()I.m2()
梯阅线条
#没有使用双下划线同名变量被覆盖I.__dict__
{X: 梯阅线条}有使用__X
使用双下化下开头变量同名变量相互独立。 class C1:def m1(self):self.__X8def m2(self):print(self.__X)class C2:def m5(self):self.__X梯阅线条def m6(self):print(self.__X)class C3(C1,C2):passIC3()I.m1();I.m5()I.m2()
8
#__X自动扩张为_C1__X 和 _C2__XI.__dict__
{_C1__X: 8, _C2__X: 梯阅线条}