(五)封装
class Person(object): def __init__(self,name,age): self.name=name self.age=age def getx(self): return self.name,self.age def setx(self, name,age): if len(name)>2 and len(name)<7: self.name = name else: print('超出名字范围') if age>18: self.age=age else: print('未成年') def show(self): print(self.name,self.age) obj=Person(name='wahah',age=22) print(obj.getx()) obj.setx(name='zxx',age=17) print(obj.getx())
(六)继承
基类(父类):被继承的类,子类继承父类后,会继承父类里面所有的属性(数据属性&实例属性)以及方法 派生类(子类):继承其他的类,子类继承父类后,能够继承父类里面所有的方法以及属性,当然也可以调用
继承的N个原则:
1、子类可以继承N个父类,但是建议不要超过2个,最多2个
2、上下原则---》如果子类没有重写父类的方法,那么使用的是上下原则
- A、如果子类没重写父类的方法,调用父类的方法,输出的结果是父类里面方法的输出结果
- B、如果子类重写了父类里面的方法,那么调用该重写的方法,输出的结果是子类里面方法的输出结果
方法重写:子类重写了父类里面的方法,重写的目的是父类的方法没有办法满足子类的需求,那么就会重写
4、从左到右原则,线性查找
所以在Python中,基于MRO的解析顺序规则,就会从左到右开始查找基类,如果找到第⼀个匹配的属性类,就会 停⽌查找,如果没有,那就继续查找,直到查找到符合要求的为⽌。MRO其实就是通过⼀个C3线性化算法来实现 的,它的核⼼思想为:
-
⼦类会优先于⽗类检查
-
多个⽗类会根据它们在列表中的顺序被依次检查
-
如果对下⼀个类存在两个合法的选择,只能选择第⼀个
把Python2的类叫经典类,Python3的类叫新式类,其实在Python2中,多个类的继承算法叫深度优先,⽽Python3叫⼴度优先。
(七)多态(鸭子类型)
‘一切皆对象’
import json # 分离重复的代码 class Main(object): def out(self): username = input('请输入账户:\n') password = input('请输入密码:\n') return username,password #注册 def register(self): username,password=self.out() temp = username + '|' +password json.dump(temp, open('user.md', 'w')) #登录 def login(self): username, password =self.out() lists=str(json.load(open('user.md','r'))).split('|') if username==lists[0] and password==lists[1]: return True else: return False #个人主页 def profile(self): lists=str(json.load(open('user.md','r'))).split('|') if self.login(): print('{nick}登录成功'.format(nick=lists[0])) else: print('账户或密码错误') def main(self): while True: try: f=int(input('1,注册 2,个人主页 3,退出\n')) if f==1: self.register() elif f==2: self.profile() elif f==3: break except: continue # 主函数,程序执行的入口 if __name__ == '__main__': obj=Main() obj.main()