Python - 私有属性(双下线的变形)
2024-09-04 22:33:16
__x会自动变形为_类名__x
正常情况
class A:
def foo(self):
print('from A')
def test(self):
self.foo()
class B(A):
def foo(self):
print('from B')
b = B()
b.test()
# from B
把foo定义成私有
class A:
def __foo(self): #双下线私有属性在定义时就变形为_A__fa
print('from A')
def test(self):
self.__foo() #调用变形后的私有属性对象,即_A__fa
class B(A):
def __foo(self):
print('from B')
b = B()
b.test()
# from A
原理:父类的__x私有属性在定义时已经变形为_父类__x,子类可以继承这个属性,但无法覆盖。所以test()里面的self.__foo的self已经绑定了父类,子类的__foo()无法覆盖。
class A:
def __foo(self): #双下线私有属性在定义时就变形为_A__fa
print('from A')
def test(self):
self.__foo() #调用变形后的私有属性对象,即_A__fa
class B(A):
def __foo(self):
print('from B')
b = B()
b._A__foo()
# from A
Python的私有属性的缺点
这种变形并没有真正限制从外部直接访问属性
class A:
def __foo(self):
print('from A')
def test(self):
self.__foo()
a = A()
a._A__foo()
最新文章
- 学习 AppFuse
- win7下安装和使用Windows XP Mode
- mybatis多表连接在一起查询
- Java程序设计的DOS命令基础
- Keepalived安装使用详解
- Day05 - Python 常用模块
- mac上的键盘生活——输入法键位设置小技巧以及去掉自带输入法
- 菜鸟学开店—最简收银POS系统
- 总结&;计划
- repeater截取字数
- php 序列化储存和转化 json_encode() json_decode($q,true)
- php 日期 - 计算2个日期的差值
- IT第六天 - eclipse快捷操作、万年历项目的编写、菱形的打印输出、代码简化
- MYSQL C API 记录
- django 实现登录时候输入密码错误5次锁定用户十分钟
- epoll 惊群处理
- ABP 多租户 对应多数据库 租户启动报错
- python 内置标准库socketserver模块的思考
- HFun.快速开发平台(四)=》自定义列表实例(请求参数的处理)
- 机器学习: K-means 聚类