一、类实战
class Person(object): city="西安" def __init__(self,name,age): self.name=name self.age=age def show(self): print('my name is {0},and my age is {1},and my city is {2}'.format(self.name,self.age,self.city)) @property def info(self): """只读属性""" print('特性方法') @staticmethod def jing(): print('静态方法') @classmethod def admin(cls): print('类方法')
# obj=Person(name='chen',age=10)
# obj.show()
# obj.info
# Person(name='chen',age=10).jing()
# Person(name='chen',age=10).admin()
执行以上代码,结果为
2、登陆实战
class login(object): def __init__(self,username,password): self.username=username self.password=password def login(self,nick): if self.username=='chen' and self.password=='xin': print('我的昵称是:{0}'.format(nick)) return 'asdf' else: print('账户密码错误') def Profile(self,token): if token=='asdf': print('登陆成功') else: print('请登录') def func(self,*args,**kwargs): print(args,kwargs) objLogin=login(username='chen',password='xin') objLogin.Profile(token=objLogin.login(nick='陈')) objLogin.func(name='chen',nick='asd',age=2321,address='beijing') """ java是单继承 python是多继承
"""
执行以上代码,结果为
3、单继承,方法重写
""" 父类:基类 子类:派生类 """ class Person(object): def __init__(self,name,age): self.name=name self.age=age def show(self): print('name is {0},age is {1}'.format(self.name,self.age)) class Work(Person): def __init__(self,name,age,salary): #super()的方法是继承父类的实例属性 # super().__init__(name,age) Person.__init__(self,name,age) self.salary=salary #方法重写 def show(self): print('我的名字:{0},年龄:455,薪资:234.4'.format(self.name,self.age,self.salary)) objWork=Work(name='chen',age=199,salary=123.33) objWork.show() """ 当子类重写了父类的方法后,子类实例化后,调用重写的方法,优先考虑的是子类的方法 继承里面的第一个原则: 前提:单继承 原则:当实例化子类后,子类对象调用的方法和父类里面的方法重名,优先考虑子类的方法
执行以上代码,结果为
4、多继承
class Person(object): def __init__(self,name,age): self.name=name self.age=age class Student(Person): def __init__(self,name,age,score): super().__init__(name,age) self.score=score class TextWork(Student): def __init__(self,name,age,score,salary): super().__init__(name,age,score) self.salary=salary def info(self): print('名字:{0},年龄:{1},分数:{2},薪资:{3}'.format(self.name,self.age,self.score,self.salary)) obj=TextWork(name='chen',age=123,score=56,salary=21312.3) obj.info()
执行以上代码,结果为:
5、在Python中,基于MRO的解析顺序规则,就会从左到右开始查找基类,如果找到第一个匹配的属性类,就会停止查找,如果没有,那就继续查找,直到查找到符合要求的为止。MRO其实就是通过一个B线性化算法来实现的,它的核心思想为:。子类会优先于父类检查
·多个父类会根据它们在列表中的顺序被依次检查
·如果对下一个类存在两个合法的选择,只能选择第一个
class Person(object): def info(self): print('a') def info(self,name): print('a',name) def info(self): print() class Father(Person): pass class Son(Father): pass print(Son.mro())
执行以上代码,结果为:
6、登陆实战
import json import sys class Actual(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('123.tet','w')) def login(self): username,password=self.out() lists=str(json.load(open('123.tet'))).split('|') if username==lists[0] and password==lists[1]: return True else: print('请检查账户或密码') def profile(self): lists=str(json.load(open('123.tet'))).split('|') if self.login(): print('欢迎访问,我的名字是{0}'.format(lists[[0]])) def main(self): while True: try: f = int(input('1、注册 2、登录 3、查看主页 4、退出\n')) if f==1: self.register() elif f==2: self.login() elif f==3: self.profile() elif f==4: break else:continue except Exception as e:continue if __name__ == '__main__': obj=Actual() obj.main()
执行结果为: