python3 面对对象编程三大特性之一:封装
发布时间:2020-12-17 16:59:29 所属栏目:Python 来源:网络整理
导读:封装约定 约定一:任何以单下划线开头的名字都应该是内部的,私有的 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(s
封装约定 约定一:任何以单下划线开头的名字都应该是内部的,私有的 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__star p1=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() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |