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’将不会输出,会报错

  

posted @ 2019-08-07 16:55  blw1123  阅读(221)  评论(0)    收藏  举报