Python — 面向对象进阶1
# 使用装饰器的时候,需要注意: # 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()
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()