python三大禁忌_python3 面对对象编程三大特性之一:封装

封装约定

约定一:任何以单下划线开头的名字都应该是内部的,私有的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,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.__dict__)    #__star存到类的属性字典中被重命名为_People__star

p1=People('333333','alex',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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值