Python — 面向对象进阶1

@property装饰器

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

    def __init__(self, name, age):
        self._name = name
        self._age = age

    # 访问器 - getter方法
    @property
    def name(self):
        return self._name

    # 访问器 - getter方法
    @property
    def age(self):
        return self._age

    # 修改器 - setter方法
    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        if self._age <= 16:
            print('%s正在玩飞行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)


def main():
    person = Person('王大锤', 12)
    person.play()
    person.age = 22
    person.play()
    # person.name = '白元芳'  # AttributeError: can't set attribute


if __name__ == '__main__':
    main()
"""
在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()

__slots__魔法

class Person(object):

    # 限定Person对象只能绑定_name, _age和_gender属性
    __slots__ = ('_name', '_age', '_gender')

    def __init__(self, name, age):
        self._name = name
        self._age = age

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        self._age = age

    def play(self):
        if self._age <= 16:
            print('%s正在玩飞行棋.' % self._name)
        else:
            print('%s正在玩斗地主.' % self._name)


def main():
    person = Person('王大锤', 22)
    person.play()
    person._gender = ''
    # AttributeError: 'Person' object has no attribute '_is_gay'
    # person._is_gay = True

练习

"""

写一个邮箱的注册页面

  """

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()

 

posted on 2019-08-07 15:51  liyuan~  阅读(135)  评论(0编辑  收藏  举报

导航