封装之如何隐藏属性
在python中用双下划线开头的方式设置属性将属性隐藏起来(设置成私有的),以双下划线开头且双下划线结尾的是python的内置方法。
# 其实这仅仅这是一种变形操作 # 类中所有双下划线开头的名称如__x都会自动变形成:_类名__x的形式: class A: __N=0 # 类的数据属性就应该是共享的,但是语法上是可以把类的数据属性设置成私有的,如__N,会变形为_A__N def __init__(self): self.__X=10 # 变形为self._A__X def __foo(self): # 变形为_A__foo print(‘from A‘) def bar(self): self.__foo() # 只有在类内部才可以通过__foo的形式访问到. # A._A__N是可以访问到的,即这种操作并不是严格意义上的限制外部访问,仅仅只是一种语法意义上的变形
这种变形的特点:
- 在类外部无法直接 A.__N
- 在类内部是可以直接使用:A.__N
- 子类无法覆盖父类 __ 开头的属性
- 变形只在定义类里面发生,在类外面定义是不会发生变形的
# 带 __ 的属性名,父类与子类中属性名字不同,所以不存在覆盖一说 class Foo: def __func(self): # _Foo__func print(‘from foo‘) class Bar(Foo): def __func(self): # _Bar__func print(‘from bar‘)
如果子类里面有和父类的同名属性,想使用父类里的属性,不想被覆盖,把父类里的同名属性前加上 __ , 在另一个属性内进行调用。
class A: def __foo(self): # _A__foo print(‘A.foo‘) def bar(self): print(‘A.bar‘) self.__foo() # self._A__foo class B(A): def foo(self): # _B_foo print(‘B.foo‘) b = B() b.bar()
原文地址:https://www.cnblogs.com/Moxiaoyu666/p/10909218.html
时间: 2024-10-09 13:35:19