2019年8月7日(面向对象进阶)

1、面向对象编程基础

   1)私有变量

———————————————————————————————————————————————————————————————

 案例1:

 
import random
class Regist(object):
    """
    Implementation resgist in 163.
    """
    def account(self):
        """
        Input account.
        """
        # 检测邮箱的正确性.
        # input 返回出来的是一个字符串
        email = input('请输入邮箱:>>')
        print('📮 您输入的邮箱是: %s' % email)
        self.password()
    def password(self):
        """
        input passward,
        """
        # 密码的长度必须是6-20位
        # 密码必须含有大写小写字母以及数字.
        for _ in range(4):
            password_1 = input('请输入您的密码:>>')
            password_2 = input('请输入确认密码:>>')
            if password_1 == password_2:
                print('密码确认成功')
                self.verfily()
                break
            else:
                print('两次密码不一致')
        else:
            print('您可能是一个机器人滚😡')
    def verfily(self):
        """
        ver...
        """
        # 英文和数字的结合
        # 给予一个简单的数学运算得到结果.
        for _ in range(3):
            number = random.randrange(1000,9999)
            print('验证码是: %d'%number)
            number_2 = input('输入验证码:>>')
            if number == int(number_2):
                print('注册成功')
                break
            else:
                print('验证码错误')
        else:
            print('机器人😡')
def main():
    regist = Regist()
    regist.account()

main()
 
请输入邮箱:>>123
📮 您输入的邮箱是: 123
请输入您的密码:>>123
请输入确认密码:>>123
密码确认成功
验证码是: 4674
输入验证码:>>4674
注册成功
———————————————————————————————————————————————————————————————

 2、面向对象进阶

       1)@property装饰器

       之前我们讨论过Python中属性和方法访问权限的问题,虽然我们不建议将属性设置为私有的,但是如果直接将属性暴露给外界也是有问题的,比如我们没有办法检查赋给属性的值是否有效。我们之前的建议是将属性命名以单下划线开头,通过这种方式来暗示属性是受保护的,不建议外界直接访问,那么如果想访问属性可以通过属性的getter(访问器)和setter(修改器)方法进行对应的操作。如果要做到这点,就可以考虑使用@property包装器来包装getter和setter方法,使得对属性的访问既安全又方便,代码如下所示。

# 使用装饰器的时候,需要注意:
 # 1. 装饰器名,函数名需要一致.
 # 2. property需要先声明,再写setter,顺序不能倒过来
 # 3. 如果你希望一点变量只是被访问不能被修改,那么可以使用访问器@property
 # 4. 如果要修改访问器中的变量,可以搭建一个修改器,或者删除访问器.

"""
在python中类是动态的.
"""
class Num(object):
   def __init__(self):
       self.a = 1000
   
   def A(self):
       print(self.b)

num = Num()
num.b =1000000
# print(num.a)
print(num.b)
num.A()

       2)__slots__魔法


     我们讲到这里,不知道大家是否已经意识到,Python是一门动态语言。通常,动态语言允许我们在程序运行时给对象绑定新的属性或方法,当然也可以对已经绑定的属性和方法进行解绑定。但是如果我们需要限定自定义类型的对象只能绑定某些属性,可以通过在类中定义__slots__变量来进行限定。需要注意的是__slots__的限定只对当前类的对象生效,对子类并不起任何作用。


——————————————————————————————————————————————————————————————— 
案例2:
#输入三个数字(私有),求三个数字的和
#尝试修改其中两个数字

class Number(object):
    def __init__(self,num1,num2,num3):
        self.__num1 = num1
        self.__num2 = num2
        self.__num3 = num3
    @property
    def num1(self):
        print(self.__num1)
        
    @num1.setter
    def num1(self,num):
        self.__num1 = num
       
    def SUM(self):
        print(self.__num1 + self.__num2 + self.__num3)
        
number = Number(1,2,3)
number.num1 = 1000
number.SUM()
 
1005
——————————————————————————————————————————————————————————————— 
 案例3:
#创建一个隐私空间,默认情况下只能被看
#当你输入密码正确的时候,才能被修改
 
class Num(object):
    def __init__(self):
        self._mimi = '哈哈哈'
        self._mima = '123456'
       
    @property
    def mimi(self):
        return self._mimi
    @mimi.setter
    def mimi(self,str_):
        self._mimi = str_
        
num = Num()
print(num.mimi)
num.mimi = '啦啦'
print(num.mimi)


哈哈哈
啦啦
 

 

posted @ 2019-08-07 17:21  七月桔梗花未开*  阅读(181)  评论(0编辑  收藏  举报