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、退出

 




posted @ 2021-08-17 18:05  wuyikai  阅读(83)  评论(0)    收藏  举报