python--封装
封装
广义的封装: 实例化一个对象,给对象空间封装一些属性.
狭义的封装: 私有制.
私有属性
python遇到私有属性或者私有变量的时候,会在私有属性前加上_类名,如下面的B类的__money,python在执行到这句的时候,会变成_B__money=1000,可以通过B.__dict__来查看
class B: __money = 1000 class A(B): name = "zou" __age = 18 def func(self): print(self.__age) print(A.__age) print("func...") a1 = A() print(a1.__age) # 会报错,实例化对象不能访问静态字段 print(A.__age) # 会报错,类名不能访问静态变量 a1.func() # 对于私有静态字段来说,只能在本类中内部访问,类的外部,派生类均不可访问
当然,也可以使用其他方法访问
print(A._A__age) print(A.__dict__)
私有方法
class B(): __money = 1000 def __f1(self): print("B") class A(B): def __func(self): print("A") def func1(self): self.__func() A.__func(self) def func2(self): self.__f1() a1 = A() # a1.__func()#会报错,类外部不能访问私有方法 a1.func1() # 类的内部可以访问 a1.func2() # 会报错,类的派生类也不能访问
例
class Dome: def __init__(self, name, life=100): self.name = name self.__life = life # 私有属性,外面不可见,只有在类里 def talk(self): print('%s:say hello' % self.name) def life_show(self): # 在类里将私有属性设置后外面就可以 调用了 self.__life -= 20 print('name:%s life:%s' % (self.name, self.__life)) def sleep(self): print('we are sleep') def __shopping(self): # 私有方法外面调用不了 print('go shoping...') f1 = Dome('zou') f1.talk() f2 = Dome('jack', 80) f2.sleep() print(f1.name) # print(f1.__life)已经成私有属性了,直接访问不了 f1.life_show() f2.life_show() # f1.__shopping()用不了,成了私有方法了
结果:
zou:say hello we are sleep zou name:zou life:80 name:jack life:60
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)