Python面向对象(类方法、继承、实战)
一、类的方法
在Python的类⾥⾯,在类⾥⾯编写的特性函数称为⽅法,这些⽅法主要分为普通⽅法,特性⽅法,静态⽅法,类⽅法。
- 普通⽅法:属于对象也属于类
- 特性⽅法:属于对象,编写特性⽅法的使⽤需要特别注意,该⽅法不能有形式参数
- 静态⽅法:属于类,使⽤类名直接调⽤
- 类⽅法 :属于类,使⽤类名直接可以调⽤
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},ang 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='wuyikai',age=18) obj.show() Person(name='wuyikai',age=18).jing() Person(name='wuyikai',age=18).admin()
class Login(object): def __init__(self,username,password): self.username=username self.password=password def login(self,nick): if self.username=='wuyikai' and self.password=='001': print('我的昵称是:{0}'.format(nick)) return 'asd' else: print('你的账户或密码错误') def profile(self,token): if token=='asd': print('显示具体的主页信息') else: print('请登录') def func(self,*args,**kwargs): print(args,kwargs) objLogin=Login(username='wuyikai',password='001') objLogin.profile(token=objLogin.login(nick='组织者')) objLogin.func(name='wuyikai',nick='组织者',age=18,address='西安') 我的昵称是:组织者 显示具体的主页信息 () {'name': 'wuyikai', 'nick': '组织者', 'age': 18, 'address': '西安'}
二、类的继承
在Python⾥⾯,⼀个类是可以继承多个类的。我们可以把类的继承理解为类与类之间的关系,在Python3⾥⾯,类的继承使⽤的算法是MRO的算法。在继承中,继承的类叫⼦类或者派⽣类,被继承的类称为基类或者是⽗类。
子类重写了父类的方法后,子类实例化,调用重新的方法,优先考虑的是子类的方法
前提:单继承
原则:当实例化子类后,子类对象调用的方法和父类里面的方法重名,优先考虑子类的方
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().__init__(name,age) Person.__init__(self,name,age) self.salary=salary def show(self): print('name is {0},age is {1},salary is {2}'.format(self.name,self.age,self.salary)) objWork=Work(name='wuyikai',age=18,salary=1789) objWork.show() name is wuyikai,age is 18,salary is 1789
从左到右的原则:
前提:子类继承了N个父类,子类没有重写父类的方法
执行结果:实例化子类化,调用父类的方法,他的查找顺序是从左到右,先是第一个,如果没有找到合适的,接着第二个去找,直到找到符合要求的。
class Father(object): def show(self): print('father show') class Mother(object): def show(self): print('mother show') class Son(Father,Mother): pass son=Son() son.show() father show
从下到上的原则:
前提:子类继承了N个父类,子类没有重写父类的方法
执行结果:实例化子类后,调用具体的方法,优先考虑子类的方法
class Father(object): def show(self): print('father show') class Mother(object): def show(self): print('mother show') class Son(Father,Mother): def show(self): print('son show') son=Son() son.show() son show
类的继承实战
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 TestWork(Student): def __init__(self,name,age,score,salary): super().__init__(name,age,score) self.salary=salary def info(self): print('name:{0},age:{1},score:{2},salary:{3}'.format(self.name,self.age,self.score,self.salary)) obj=TestWork(name='wuyikai',age=18,score=100,salary=9999) obj.info() name:wuyikai,age:18,score:100,salary:9999
类的实战
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('user.md','w')) def login(self): username,password=self.out() lists=str(json.load(open('user.md'))).split('|') if username==lists[0] and password==lists[1]: return True else: print('请检查你的账户或者密码') def profile(self): lists=str(json.load(open('user.md'))).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 # print('zdfg') if __name__ == '__main__': obj=Actual() obj.main() 1、注册 2、登录 3、查看主页 4、退出

浙公网安备 33010602011771号