python进阶
一、访问可见性
在很多面向对象编程语言中,我们通常会将对象的属性设置为私有的或受保护的,简单的说就是不允许外界访问,而对象的方法通常都是公开的,因为公开的方法就是对象能够接受的消息。在Python中,属性和方法的访问权限只有两种,也就是公开的和私有的。

1.私有变量,变量名前面加”__“
2.如果非要用私有变量,那么可以使用dir(class())去查看真正的名字
3.私有变量/函数,在类内部可以直接调用.
4.如果你想体现一个变量/函数特别重要你可以使用"_"
5.案例:163邮箱注册
import random
class zhuce(object):
def youxiang(self):
self.shuru = input('请输入邮箱')
if len(self.shuru)<8 and len(self.shuru)>10:
print('请输入正确的邮箱格式')
else:
print(self.shuru,'@163.com')
def mima1(self):
self.yi
if len(self.yi) <6 and len(self.yi)>20:
print('请输入6-20位密码!!!')
self.mima1()
def mima2(self):
self.er = input('请再次输入密码')
if self.yi == self.er:
print('请继续下一步')
else:
print('请输入相同密码!!!')
self.mima2()
def yanzheng(self):
self.yanzhengma = random.randrange(1000,9999)
print('验证码为:',self.yanzhengma)
shuru1 = input('请输入验证码')
if int(shuru1) != self.yanzhengma:
print('重新验证')
self.yanzheng()
else:
print('请继续下一步')
a=zhuce()
a.youxiang()
a.mima1()
a.mima2()
a.yanzheng()
二、装饰器:在外界访问私有变量
1. 使用装饰器的时候,需要注意:
(1)装饰器名,函数名需要一致.
(2)property需要先声明,再写setter,顺序不能倒过来
(3)如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
(4)如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.
2.案例:输入三个数字,求三个数字的和
class Name(object):
def __init__(self,a,b,c):
self.__a = a
self.__b = b
self.__c = c
@property
def a(self):
print(self.__a)
@a.setter
def a(self,num):
self.__a=num
def sum(self):
print(self.__a +self.__b +self.__c)
name = Name(10,20,30)
name.a=100
name.sum()
3.python中类是动态的
class Num(object):
def __init__(self):
self.a = 1000
num = Num()
num.b =1000000
print(num.b)#函数中没有定义b这个变量,但手动添加却可以调用b
4.__slots__魔法
class Num(object):
__slots__=("a","b")
def __init__(self):
self.a=1000
num=Num()
num.b=1000000
print(num.b)#如果在外部定义一个‘c’,‘c’将不会输出,会报错

浙公网安备 33010602011771号