面向对象—封装

# 广义上的封装 :把变量和函数都放在类中
# 狭义上的封装 :把一些变量 或者 方法 隐藏起来,不对外公开
# 公有的 :
# 私有的 : __名字

#Part1 私有静态属性
class FOO:
name='alex'#普通的静态属性
__pas='alex3714'#私有的静态属性
# 类里的属性在加载阶段就已经执行了,除了函数内的代码,这行是可以正常打印
print(name,__pas)#私有的名字,可以在类的内部调用
print(FOO.name)#name存在与类的内存中,所以可以直接通过类名访问
# #私有的名字,只能在类的内部使用,不能再类外部使用
# # print(FOO.__pas)##执行报错,type object 'FOO' has no attribute '__pas'
print(FOO._FOO__pas)#如果非要调用,可以这样访问:_类名__私有的名字(理论上这是不允许的)
FOO.__pas='hello'#会重新定义一个'__pas'不能改变私有的变量'_FOO__pas'
print(FOO.__dict__)#


#Part2 私有的对象属性,在类的方法中可以直接调用
class FOO:
def __init__(self,name,pwd):
self.name=name
self.__pwd=pwd #私有的对象属性
def login(self):
if self.name=='alex'and self.__pwd=='alex3714':
print('登陆成功')
person=FOO('alex','alex3714')
person.login()
print(person.__dict__) #{'name': 'alex', '_FOO__pwd': 'alex3714'}


#part3 私有的方法
class Person:
def __init__(self):pass
def __eat(self):
print('eating')
alex=Person()
alex.__eat() #实例不能访问该私有方法:'Person' object has no attribute '__eat'
# alex3714--》加密--》加密后的
#这个功能只想提供类内使用,不想外部用,就可以使用私有方法
#例如:制造密码
class Person:
def __init__(self):pass
def __制造密码转换(self,inp):
print('转换%s'%inp)
def 注册(self):
inp = input('pwd>>>')
加密之后的密码 = self.__制造密码转换(inp) #私有的方法,可以在类内被调用
alex=Person()
alex.注册()


#part4 面试题
class Foo:
def __init__(self):
self.func()
def func(self):
print('in Foo')

class Son(Foo):
def func(self):
print('in son')

s = Son()
#输出:in son

class Foo:
def __init__(self):
self.__func() ##根据私有方法位置决定了__func()等同_Foo__func()
def __func(self):
print('in Foo')

class Son(Foo):
def __func(self):##__func()等同_Son__func()
print('in son')
s = Son()

#输出:in Foo



转载于:https://www.cnblogs.com/lixiaoxuan/articles/9067630.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值