• python初识面向对象


    类与对象的关系
    类: 就是创建对象的第一步,先写类
    对象: 通过类来创建对象

    类是对某事物的归类(类就是对属性和方法的封装)
        __init__(self, 参数): 参数一般作为属性设置给对象,对象就是self,对属性的封装,(根据需要,如果在类中传参就用__init__,如果不需要传参,就直在类里定义函数即可)
        def 方法(self, 参数): 方法,第一个参数一般是固定的self,当前类的对象
    创建类:
        class 类名:

    对象是某类型的一个具体
    创建对象:
        变量 = 类名()   #实例化 <-> 创建对象
        变量.属性       #访问对象的属性信息
        变量.方法()     #访问类中的方法

    class 类名:
        def __init__(self,值1,值2): # __init__(初始化方法,又被成为构造方法)
            self.属性 = 值1
            self.属性 = 值2
    
        def 方法(self):
            方法体
        def 方法2(self):
            方法体2
    
    对象名 = 类名(值1,值2)
    对象名.方法()
    对象名.方法2()

    创建类

    class Car:  #类名首字母大写,严格遵守变量命名规则
        pass
    c = Car()             #创建对象,对象名=类名()
    c.color = '红色'      # 对象.属性(.意思就是'的')当属性不存在的时候,添加一个属性
    c.pai = '京A88888'
    c.color = '黑色'      # 当属性存在的时候是修改属性信息(类似于字典根据key修改value)
    print(c.color)
    print(c.pai)
    结果
    红色
    黑色
    京A88888

    创建一个类并调用这个类
    __init__方法是一个特殊的方法,初始化方法(构造方法),在创建对象的时候,默认执行这个函数
    在创建对象的时候会自动的调用__init__()
    self就是创建出来的对象

    class Car:
        def __init__(self,color,pai):
            self.a = color
            self.pai = pai
        def pao(self):          #在类中写的函数就是方法,self当前类的对象
            print('我%s的%s车能跑'%(self.a,self.pai))
        def jump(self):
            print('我的%s车能飞'%self.pai)
    c=Car('红色','京A88888')   # 创建Car类型对象,self参数不需要管
    c.pao()
    c.jump()
    c2 = Car('黑色','京B66666')
    c2.pao()
    c2.jump()
    结果
    我红色的京A88888车能跑
    我的京A88888车能飞
    我黑色的京B66666车能跑
    我的京B66666车能飞
    
    事例2,对象传参
    class Car:
        def __init__(self,color,pai):
            self.a = color
            self.pai = pai
        def pao(self,ret):
            print('我%s的%s车能跑%s'%(self.a,self.pai,ret))
        def jump(self):
            print('我的%s车能飞'%self.pai)
    c=Car('红色','京A88888')
    c.pao('太空')
    c.jump()
    结果
    我红色的京A88888车能跑太空
    我的京A88888车能飞
    
    
    练习
    用向对象的思维来模拟LOL里的盖伦上阵杀敌
    class Hero:
        def __init__(self,name,nickname):
            self.name = name
            self.nickname = nickname
        def synopsis(self):
            print('%s外号%s'%(self.name,self.nickname))
        def q(self):
            print('拎着大宝剑嗷嗷跑')
        def w(self):
            print('护盾')
        def r(self):
            print('大宝剑')
    gw = Hero('盖伦','德玛西亚之力')
    gw.synopsis()
    gw.q()
    gw.w()
    gw.r()
    结果
    盖伦外号德玛西亚之力
    拎着大宝剑嗷嗷跑
    护盾
    大宝剑
    
    用向对象的思维来完成用户登录
    class People:
        def __init__(self,user,pwd):
            self.user = user
            self.passwd = pwd
        def login(self):
            use = input('user:')
            password = input('passwd:')
            if use == self.user and password == self.passwd:
                print('登陆成功')
            else:
                print('登陆失败')
    Lgin = People('bob','123')
    Lgin.login()

    面向对象和面向过程对比
    脚本:(简单)
    一切以事务的发展流程为中心
    根据业务逻辑从上到下写垒代码

    print('开冰箱门')
    print('装大象')
    print('关闭冰箱')

    函数式(比脚本麻烦)
    将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

    def kai():
        print('开冰箱门')
    def zhuang():
        print('装大象')
    def guan():
        print('关闭冰箱')
    kai()
    zhuang()
    zhuang()
    guan()

    面向对象:
    一切以对象为中心,一切皆为对象,具体的某一个事务就是对象
    对函数进行分类和封装,让开发"更快更好更强..."
    对整个系统进行分析,分析出需要哪些对象,然后给对象进行归类
    先写类,然后使用类创建对象,最后用对象去执行相关的操作

    class Elephant:
        def __init__(self):
            print('创建大象')
        def kai(self):
            print('开冰箱门')
        def zhuang(self):
            print('装大象')
        def guan(self):
            print('关闭冰箱')
    e = Elephant()
    e.kai()
    e.zhuang()
    e.guan()

    总结
    脚本简单,不需要构思整个程序的概况
    函数侧重的是功能,对功能有了概况
    面向对象侧重的是归类
    面向过程: 代码非常的冗余. 尤其是参数
    面向对象的程序:
    优点: 不需要像原来一样传递同样的参数了,结果相对清晰,可维护性好
    缺点: 代码量比原来大,上手太难
    应用场景:
    如果写一些比较小的程序用面向过程
    程序很复杂,很庞大建议用面向对象
       
    python同时支持面向对象和面向过程:
    面向过程: 应用程序相对比较小,不需要大规模的设计
    面向对象: 程序非常大,项目管理维护成本很高,此时更适合用面向对象(结构)


    封装
    1. 对属性的封装
    2. 对功能的封装
    3. 模块的封装
    4. 包的封装

    class Game:
        def login(self):
            print("登录")
        def recharge(self):
            print("充钱")
        def uninstall(self):
            print("卸载")
        def zhaoduixiang(self):
            print("找对象")
    
    class Game1:
        def recharge(self):
            print("充钱")
        def uninstall(self):
            print("卸载")
    
    class Game2:
        def recharge(self):
            print("充钱")
        def uninstall(self):
            print("卸载")
    
    g = Game2()
    g.uninstall()
    结果
    卸载

    继承
    子类自动拥有父类中除了私有内容外的其他所有内容
    继承目的: 对父类进行扩展

    class Foo:
        def getmoney(self):
            print('多花钱')
    class Bar(Foo):
        pass
    b = Bar()
    b.getmoney()
    结果
    多花钱
    
    事例2
    class Animal:
        def dong(self):
            print('动物会叫')
    class Cat(Animal):
        def an(self):
            print('猫捉老鼠')
    c = Cat()
    c.dong()
    c.an()          #子类可以执行子类和父类中的方法
    
    c = Animal()    #父类的对象不能执行子类中的功能
    c.dong()
    # c.an()        # 创建的是Animal,所以不能执行子类中的方法
    
    事例3
    class Animal:
        def dong(self):
            print('动物会叫')
    class Cat(Animal):      # 子类其实是对父类的一种扩展
        def dong(self):     # 子类中写了和父类一模一样的方法. 这个叫方法的覆盖, 重写
            print('猫捉老鼠')
        def cat(self):
            print('猫上蹿下跳')
    c = Cat()
    c.dong()    # 类中的方法的查询顺序,先找自己,然后再找父类
    结果
    猫捉老鼠
    
    python支持多继承
    class Foo1:
        def dong(self):
            print('动物会叫')
        def cat(self):
            print('猫上蹿下跳')
    class Foo2:
        def dong(self):
            print('猫捉老鼠')
    class Bar(Foo2,Foo1):   #哪个类在前优先使用哪个类
        pass
    b = Bar()   # 就近原则
    b.dong()
    结果
    猫捉老鼠

    多态(同一个对象. 多种形态)
    优点:超强的可扩展性,面向对象的核心就是多态

    class Animal:
        def chi(self):
            print("会吃")
    class Tiger(Animal):
        def chi(self):
            print("老虎吃肉")
    class Elephant(Animal):
        def chi(self):
            print("大象吃香蕉")
    def wei_animal(ani):
        ani.chi()
    
    t = Tiger()
    e = Elephant()
    
    wei_animal(t)
    wei_animal(e)
    结果
    老虎吃肉
    大象吃香蕉
  • 相关阅读:
    undefined vs. null
    Callback()
    python基础----元类metaclass
    python基础----__next__和__iter__实现迭代器协议
    python基础----析构函数__del__
    python基础----__slots__方法、__call__方法
    python基础----实现上下文管理协议__enter__和__exit__
    python基础----__setitem__,__getitem,__delitem__
    python基础----isinstance(obj,cls)和issubclass(sub,super)、反射、__setattr__,__delattr__,__getattr__、二次加工标准类型(包装)
    python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法
  • 原文地址:https://www.cnblogs.com/wangm-0824/p/10199597.html
Copyright © 2020-2023  润新知