zoukankan      html  css  js  c++  java
  • python初识面向对象

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

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

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

    复制代码
     1 class 类名:
     2     def __init__(self,值1,值2): # __init__(初始化方法,又被成为构造方法)
     3         self.属性 = 值1
     4         self.属性 = 值2
     5 
     6     def 方法(self):
     7         方法体
     8     def 方法2(self):
     9         方法体2
    10 
    11 对象名 = 类名(值1,值2)
    12 对象名.方法()
    13 对象名.方法2()
    复制代码

    创建类

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

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

    复制代码
     1 class Car:
     2     def __init__(self,color,pai):
     3         self.a = color
     4         self.pai = pai
     5     def pao(self):          #在类中写的函数就是方法,self当前类的对象
     6         print('我%s的%s车能跑'%(self.a,self.pai))
     7     def jump(self):
     8         print('我的%s车能飞'%self.pai)
     9 c=Car('红色','京A88888')   # 创建Car类型对象,self参数不需要管
    10 c.pao()
    11 c.jump()
    12 c2 = Car('黑色','京B66666')
    13 c2.pao()
    14 c2.jump()
    15 结果
    16 我红色的京A88888车能跑
    17 我的京A88888车能飞
    18 我黑色的京B66666车能跑
    19 我的京B66666车能飞
    20 
    21 事例2,对象传参
    22 class Car:
    23     def __init__(self,color,pai):
    24         self.a = color
    25         self.pai = pai
    26     def pao(self,ret):
    27         print('我%s的%s车能跑%s'%(self.a,self.pai,ret))
    28     def jump(self):
    29         print('我的%s车能飞'%self.pai)
    30 c=Car('红色','京A88888')
    31 c.pao('太空')
    32 c.jump()
    33 结果
    34 我红色的京A88888车能跑太空
    35 我的京A88888车能飞
    36 
    37 
    38 练习
    39 用向对象的思维来模拟LOL里的盖伦上阵杀敌
    40 class Hero:
    41     def __init__(self,name,nickname):
    42         self.name = name
    43         self.nickname = nickname
    44     def synopsis(self):
    45         print('%s外号%s'%(self.name,self.nickname))
    46     def q(self):
    47         print('拎着大宝剑嗷嗷跑')
    48     def w(self):
    49         print('护盾')
    50     def r(self):
    51         print('大宝剑')
    52 gw = Hero('盖伦','德玛西亚之力')
    53 gw.synopsis()
    54 gw.q()
    55 gw.w()
    56 gw.r()
    57 结果
    58 盖伦外号德玛西亚之力
    59 拎着大宝剑嗷嗷跑
    60 护盾
    61 大宝剑
    62 
    63 用向对象的思维来完成用户登录
    64 class People:
    65     def __init__(self,user,pwd):
    66         self.user = user
    67         self.passwd = pwd
    68     def login(self):
    69         use = input('user:')
    70         password = input('passwd:')
    71         if use == self.user and password == self.passwd:
    72             print('登陆成功')
    73         else:
    74             print('登陆失败')
    75 Lgin = People('bob','123')
    76 Lgin.login()
    复制代码

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

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

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

    复制代码
     1 def kai():
     2     print('开冰箱门')
     3 def zhuang():
     4     print('装大象')
     5 def guan():
     6     print('关闭冰箱')
     7 kai()
     8 zhuang()
     9 zhuang()
    10 guan()
    复制代码

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

    复制代码
     1 class Elephant:
     2     def __init__(self):
     3         print('创建大象')
     4     def kai(self):
     5         print('开冰箱门')
     6     def zhuang(self):
     7         print('装大象')
     8     def guan(self):
     9         print('关闭冰箱')
    10 e = Elephant()
    11 e.kai()
    12 e.zhuang()
    13 e.guan()
    复制代码

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


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

    复制代码
     1 class Game:
     2     def login(self):
     3         print("登录")
     4     def recharge(self):
     5         print("充钱")
     6     def uninstall(self):
     7         print("卸载")
     8     def zhaoduixiang(self):
     9         print("找对象")
    10 
    11 class Game1:
    12     def recharge(self):
    13         print("充钱")
    14     def uninstall(self):
    15         print("卸载")
    16 
    17 class Game2:
    18     def recharge(self):
    19         print("充钱")
    20     def uninstall(self):
    21         print("卸载")
    22 
    23 g = Game2()
    24 g.uninstall()
    25 结果
    26 卸载
    复制代码

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

    复制代码
     1 class Foo:
     2     def getmoney(self):
     3         print('多花钱')
     4 class Bar(Foo):
     5     pass
     6 b = Bar()
     7 b.getmoney()
     8 结果
     9 多花钱
    10 
    11 事例2
    12 class Animal:
    13     def dong(self):
    14         print('动物会叫')
    15 class Cat(Animal):
    16     def an(self):
    17         print('猫捉老鼠')
    18 c = Cat()
    19 c.dong()
    20 c.an()          #子类可以执行子类和父类中的方法
    21 
    22 c = Animal()    #父类的对象不能执行子类中的功能
    23 c.dong()
    24 # c.an()        # 创建的是Animal,所以不能执行子类中的方法
    25 
    26 事例3
    27 class Animal:
    28     def dong(self):
    29         print('动物会叫')
    30 class Cat(Animal):      # 子类其实是对父类的一种扩展
    31     def dong(self):     # 子类中写了和父类一模一样的方法. 这个叫方法的覆盖, 重写
    32         print('猫捉老鼠')
    33     def cat(self):
    34         print('猫上蹿下跳')
    35 c = Cat()
    36 c.dong()    # 类中的方法的查询顺序,先找自己,然后再找父类
    37 结果
    38 猫捉老鼠
    39 
    40 python支持多继承
    41 class Foo1:
    42     def dong(self):
    43         print('动物会叫')
    44     def cat(self):
    45         print('猫上蹿下跳')
    46 class Foo2:
    47     def dong(self):
    48         print('猫捉老鼠')
    49 class Bar(Foo2,Foo1):   #哪个类在前优先使用哪个类
    50     pass
    51 b = Bar()   # 就近原则
    52 b.dong()
    53 结果
    54 猫捉老鼠
    复制代码

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

    复制代码
     1 class Animal:
     2     def chi(self):
     3         print("会吃")
     4 class Tiger(Animal):
     5     def chi(self):
     6         print("老虎吃肉")
     7 class Elephant(Animal):
     8     def chi(self):
     9         print("大象吃香蕉")
    10 def wei_animal(ani):
    11     ani.chi()
    12 
    13 t = Tiger()
    14 e = Elephant()
    15 
    16 wei_animal(t)
    17 wei_animal(e)
    18 结果
    19 老虎吃肉
    20 大象吃香蕉
  • 相关阅读:
    记录一则enq: TX
    RAC节点两边存储名字不一致导致的故障及相关延伸
    记录一则fsck的简单案例
    RAC某节点v$asm_disk查询hang分析处理
    统计信息自动收集任务失效原因排查
    OEMCC 13.2 安装部署
    Linux平台Oracle 12.1.0.2 单实例安装部署
    java 除法运算只保留整数位的4种方式
    eclipse spring 配置文件xml校验时,xsd报错
    oracle decode()函数的参数原来可以为sql语句!
  • 原文地址:https://www.cnblogs.com/selina1997/p/10151647.html
Copyright © 2011-2022 走看看