封装约定
约定一:任何以单下划线开头的名字都应该是内部的,私有的
class People: _star='earth' def __init__(self,ID,name,age,salary): self.ID=ID self.name=name self._age=age self._salary=salary def _get_ID(self): print('我是私有方法啊,我找到的ID是[%s]' %self.ID)#我们明明约定好了的,只要属性前加一个单下划线,那他就属于内部的属性,不能被外部调用了啊,为何还能调用???print(People._star)p1=People('3706861900121221212','alex',28,10)print(p1._age,p1._salary)p1._get_ID()
约定二:双下划线开头的名字
class People: __star='earth' def __init__(self,salary): self.ID=ID self.name=name self.__age=age self._salary=salary def _get_ID(self): print('我是私有方法啊,我找到的ID是[%s]' %self.ID)print(People.__dict__) #__star存到类的属性字典中被重命名为_People__starp1=People('333333',18,10)print(p1.__dict__) #__age存到类的属性字典中被重命名为_People__age
注意:python中封装的私有属性是可以访问的
class People(): _star = '地球' __population = '13亿'p1 = People()print(p1._star) # 地球print(People.__dict__) # '_People__population': '13亿'print(p1._People__population) # 13亿人
这是因为双下滑线开头的属性在继承给子类时,子类是无法覆盖的(原理也是基于python自动做了双下滑线开头的名字的重命名工作)
封装的三个层面
第一个层面的封装:类就是麻袋,这本身就是一种封装
第二个层面的封装:类中定义私有的,只在类的内部使用,外部无法访问
第三个层面的封装:明确区分内外,内部的实现逻辑,外部无法知晓,并且为封装到内部的逻辑提供一个访问接口给外部使用什么是反射
接口函数:
class People(): __star = '地球' def get_star(self): print(self.__star)p1 = People()p1.get_star()
以上是内存溢出为你收集整理的python3 面对对象编程三大特性之一:封装全部内容,希望文章能够帮你解决python3 面对对象编程三大特性之一:封装所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)