第二十四天 面向过程编程

本周内容:

面向对象

周一
  面向对象基础
  类和对象
  python中的类和对象的操作
  __init__方法详解
  绑定方法

周二
  继承
  派生

周三
  封装
  组合

周四
  property
  classmethod
  staticmethod

周五
  __内置方法__
  反射
  单例

一 面向过程与面向对象编程概念

  是一种编程思想,就是前辈程序员发现的一种比较好的编程方法

  过程指的是  先干什么   再干什么,完成一个事情所有的具体步骤

  优点:把复杂的问题流程化,简单化,降低开发难度

  缺点:拓展差,再当前这种情况下 用户需求千变万化 对拓展性非常高

  使用场景:不需要拓展,或是对拓展性要求不高,例如Linux,shell脚本

  案例:把大象装进冰箱需要几步:

  1.打开冰箱

  2.装进冰箱

  3.关闭冰箱

  面向过程中我们关注的点是,完成这个任务,具体步骤  一步一步去完成

2.面向对象

  也是一种编程思想

  核心是对象

  什么是对象:在现实生活中实实在在存在的,具备自己的特征和行为的事物

    反过来说  对象就是  特征和行为(技能),它就是一个对象

  如何来区分:如果能够准确的找到一个事物,它就是一个对象

  例如:龚程的女朋友

  

  面向对象编程:我们关注的点是,使用什么样的对象可以完成我的任务

    例如:我把大象装进冰箱,什么样的对象可以完成我的任务,只要找到这个对象,命令它来做事情即可

    你从一个操作者  变成指挥,例如:西游记中的如来,他要完成一个传经,要把经书传到东土大唐去,本来要自己去,但太麻烦了,所以找了唐僧师徒五个对象,来帮他完成这个任务。

  

3.类与对象

  类就是分类  类型的意思

  定义:一堆具备相同特征和行为的事物的抽象概念,不实际存在

  先有类还是先有对象:

    生活中:

    生活中类怎么来的,市通过对象的特征和行为抽取来,

    所以是先有对象才有了类

     

    编程中:

    必须要先有类  才能有对象,因为你必须告诉程序,你这个对象有什么特征和行为

二.定义类

  语法:class关键词  类名

  类名规范  大写开头  驼峰命名法

  

class SHOldboyStudengt:
    #描述该类对象的特征
    school = "上海Oldboy"
    name = "矮根”
    age = 68
    gender = "unknown"

    #在定义阶段    
    #只要包含该类的py被执行 就会做两件事情
    #    1.就会创建类的名称空间
    #    2.执行代码  将产生的名称放入名称空间
    print(“==========”)
    
    #描述该类对象的行为 通过函数
    def say_hi(abc):
        print(abc)
        print("hello oldBoy")

#使用类中的属性
    print(SHOldboyStudent.__dict__)
    print(SHOloboyStudent.__dict__["name"])
    print(SHOldboydent.name)

#使用类中的函数
    print(SHOldboyStudent.__dict__["say_hi])
    print(SHOldboyStudent.say_hi)
    
    使用类直接调用类中函数时 普通函数没有任何区别  位self仅仅是一个位置参数
    SHOldboyStudent.say_hi(10)

三.对象的使用

class OldboyStudent:

  #如果每个对象的这个属性都相同  才应该定义到类中 比如所有人的学校都是上还0ldboy

  school = "上海Oldboy"

  1.创建对象

  语法:在类名后加括号  与调用函数写法相同

  stu = OlboyStudent()

  访问对象的属性

  print(stu.school)

  print(OldboyStudent.school)

  

  修改属性的值

  stu.school = "北京Oldboy"  

  print(OlboyStudent.school)

    

  增加属性

  stu.room_num = "1008"

  print(stu.room_num)

  删除属性

  del stu.room_num

  print(stu.room_num)

  

  对象与类的名称空间是独立的

  stu.school = "深圳oldboy"  #对象的属性赋予新的值

  print(OldboyStudent.school)#类中的属性不会变化

  stu.room_num = "1008" #为对象增加属性

  print(OldboyStudent.room_num)#类中不会出现新的属性

  print(stu.__dict__)

  

  如果对象的属性是相同的 就放到类中 作为一个公共的数据

  stu.school#大家都是上海校区

  stu2=OldboyStudent()

  print(stu2.__dict__)

  

  

  stu1 = OldboyStudent()
  print(stu1.__dict__)
  stu2 = OldboyStudent()
  print(stu2.__dict__)
  print(stu1.school)

  stu1.school = "北京Oldboy"
  print(stu1.__dict__)


  对象的属性查找顺序
  对象自己的名称空间 -> 类的名称空间
  stu1 = OldboyStudent()
  stu1.school = "newSchool"
  print(stu1.school)
  print(stu1)

四:__int__函数

  

 
 

class Dog:

 
 

  #作为一只狗 应该有 昵称 age color gender

 
 

  #但是不能写到类中 因为每个狗不一样

 
 

  #name = "二哈"

 
 

  

 
 

  #__init__称之为初始化函数  它会在创建对象的时候自动执行

 
 

  #创建对象时

 
 

  #1.创建一个空对象

 
 

  #2.执行__init__函数 并且自动传入了这个对象

 
 

  

 
 

  #该函数的作用,就是为对象的属性赋初始值


  def
__init__(self,name,color,age,gender)    print("狗__init__执行了")    print(self)    self.name = name    self.age = age    self.color = color   self.gender = gender

dog1=Dog()

print(dog1)

dog1.name = "二黄"

dog1.age = "2"

dog1.color = "黄色"

dog1.gender = "female"

dog2 = Dog()

print(dog1)

dog2.name ="二哈"

dog2.age = "1"

dog2.color = "白色"

dog2.gender = "female"

在创造对象时,传入参数

print(Dog("大黄","黄色",2,"female"))

dog1=Dog()

dog1.__init__(dog,"大黄","黄色",2,"female")

print(dog1.__dict__)
dog2 = Dog("二哈","白色",2,"female")
print(dog2.__dict__)

#1. 使用场景 需要为每个对象定制不同的属性值
#2.__init__在创建对象后自动执行
#3.第一个self参数 指的是这个对象本身 不需要手动传值

五.绑定方法

class Person:

  country = "China"

  def __init__(self,name,age,gender)

    self.name = name
    self.age = age
    self.gender = gender
  def sleep(self):

    print("sleeping")
    print(self)
  def eat(self)

    print("eating")

p1 = Person("矮根",68,"female")

p2 = Person("成伟",18,"female")

类调用类中调用 与 对象调用的区别

p1.sleep()

p2.sleep()

print(Person.sleep)

print(p1.s;eep)

类调用

Person.sleep(10)

对象调用

p1.sleep()

p1.sleep()

类调用与对象调用的区别
对于类而言 sleep就是一个普通函数
对对象而言 sleep是一个绑定方法

绑定方法是什么?
是对象与类中的某个函数的绑定关系 就像生活中 我们都会吃饭 我吃饭你不会饱
那么吃饭就是我自己的绑定方法

为什么要把函数进行绑定?
因为对象的行为 通常都需要访问这个对象的数据 或是修改这个对象的数据
如果没有对象 直接调用函数是没有意义的 在函数中访问不到对象的数据
所以将对象和函数进行绑定

特殊之处

 在使用绑定方法时 不需要关心self参数 会自动将这个对象本身传进来
 对象调用绑定方法时 最后执行的还是类中的那个函数


 def sleep2(p):
 print("%s 睡觉" % p.name)

 p2 = Person("陈大锤","20","男")
 p2.sleep2 = sleep2
 p2.sleep2(p2)

六 面向对象练习

# 王者荣耀 对砍游戏
# 两个英雄可以对砍 如果血量小于等于0 就GG
# 所需的对象
# 英雄对象
"""
亚瑟
属性
类型
血量
名称

技能
Q 跳起来给你一刀 伤害50
W 给你一脚 30
E 大宝剑 100

妲己
属性
类型
血量
名称

技能
Q 给你一颗小心心 伤害10
W 给你一尾巴 30
E 色诱 100

class Hero:
    def __init__(self,hero_type,name,blood,q,w,e)
        self.her_type = hero_type
        self.name = name
        self.blood = blood
        self.q = q
        self.e = e
        self.w =w
    def Q(self,enemy(:
        print("%s 对 %s 释放 Q技能 造成%s伤害 对方血量剩余%s" %
              (self.name,enemy.name,self.q,enemy.blood - self.q))
        # 敌方血减少
        enemy.blood -= self.q
        if enemy.blood <= 0:
            print("hero %s GG" % enemy.name)

    def W(self,enemy):
        print("%s 对 %s 释放 W技能 造成%s伤害 对方血量剩余%s" %
              (self.name,enemy.name,self.w,enemy.blood - self.w))
        # 敌方血减少
        enemy.blood -= self.w
        if enemy.blood <= 0:
            print("hero %s GG" % enemy.name)

    def E(self,enemy):
        print("%s 对 %s 释放 E技能 造成%s伤害 对方血量剩余%s" %
              (self.name,enemy.name,self.e,enemy.blood - self.e))
        # 敌方血减少
        enemy.blood -= self.e
        if enemy.blood <= 0:
            print("hero %s GG" % enemy.name)

#请选择你的英雄
yase = Hero(”战士“,"亚瑟",200,50,30,100)
daji = Hero("法师","妲己",150,10,30,180)

#妲己在草丛发现了路边的亚瑟
#daji.Q(yase)

daji.E(yase)
yase.W(daji)
yase.E(daji)
yase.Q(daji)

作业"

默写:
什么是面向对象编程

1.所有程序都因该使用面向对象来设计吗?为什么?

2.什么是对象 什么是类

3.在面向过程编程中我们思考解决方案时,是分析完成任务时需要哪些步骤,按照什么样的顺序来编写,而在面向对象编程中我们从操作者转变为指挥者 首先思考的是什么?


4.一个类中通常包含变量和函数,它们分别用于描述什么?


5.类在定义阶段发生了什么

6.创建对象时发生了什么

7.什么是绑定方法,和普通函数有什么区别


8.根据需求编写程序,

学生成绩管理系统
  1.根据姓名查看学生成绩
  2.根据科目查看学生成绩
  3.查看总平均分
  4.根据姓名,和科目,查看成绩
  5.根据姓名删除学生信息

  先分析需要哪些对象:
    学生对象
      属性:姓名,年龄,语文成绩,数学成绩,英语成绩
      行为:自我介绍(输出自己的姓名 年龄 成绩)
    管理器对象:
      属性:一堆学生(一个列表 里面装一堆学生对象 可以手动创建放进去)
      行为:上述五个功能
  增强版要求(选做)
  1.首先编写json格式的数据文件 内容为学生
  2.将json数据解析后转换为学生对象在进行增删改查

猜你喜欢

转载自www.cnblogs.com/gongcheng-/p/9832146.html