当前位置 : 主页 > 编程语言 > python >

python--封装

来源:互联网 收集:自由互联 发布时间:2022-07-13
封装 广义的封装: 实例化一个对象,给对象空间封装一些属性. 狭义的封装: 私有制. 私有属性 python遇到私有属性或者私有变量的时候,会在私有属性前加上_类名,如下面的B类的__money,

封装

广义的封装: 实例化一个对象,给对象空间封装一些属性.

狭义的封装: 私有制.

私有属性

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

 



上一篇:python--继承
下一篇:没有了
网友评论