2021-04-10 Python初级Day08

  • 面向对象和面向过程区别

1.面向过程:把完成某一个需求的所有步骤从头到尾逐步实现。这过程中可以将某些独立代码封装成函数,完成代码就是顺序的调用函数

2.面向过程的特点:注重步骤,不注重职责分工

3.面向对象:首先梳理职责-即要做的事情(方法),第二部根据方法确定不同的对象,在对象内部封装多个方法,最后顺序地让不同对象调用不同方法

4.面向对象的例子:

  • 类和对象

类和对象是面向对象编程的两个核心概念

1.类:一群具有相同特征或者行为的事物的抽象概括,里面包含属性和方法两个元素。类像是图纸,用于创建对象。类的定义满足大驼峰命名法。如CustomerName

2.对象:由类创建的具体存在,具有该类的属性和方法

3.类和对象:先有类,后有对象。类有1个可对应多个对象

  • 类的属性和方法

1.属性:对对象的特征描述

2.方法:对象的行为

3.语法:Python中要定义一个只包含方法的类

class 类名:
    def 方法1(self, 参数列表):
        内容
    def 方法2(self, 参数列表):
        内容

#方法的定义格式和之前学习过的函数几乎一样
#区别在于第一个参数必须是 self

4.语法: 当一个类定义完成之后,要使用这个类来创建对象,语法格式如下

对象变量 = 类名()

5.语法: 对象调用属性和方法

类的外部:对象名. 属性                  对象名. 方法

类的内部:self.属性             self.方法(本质上和上一行一样)

self代表什么?

1.self的本质是调用该方法的对象,本质是对象。比如上文定义的类。如果该类创建了两个对象a和b

如果a调用了方法1,那么self就代表对象a

如果b调用了方法1,那么self就代表对象b

2.定义函数和方法的差距就是定义方法时,括号中必须有self。因为方法毕竟是在类中定义的,就一定会包含谁引用+参数两个内容。

3.如果是在类封装内部调用属性和方法,用self.属性/方法即可。此处self代表调用方法的对象自己。

4.定义方法时候有self,调用的时候不同传递self参数,因为调用的语法对象名.已经包含了

  • 初始化方法--重点在用,理解难点

1.当使用类名()创建对象时,会自动执行以下操作:

a. 为对象在内存中分配空间—— 创建对象
b. 为对象的属性设置初始值—— 初始化方法(init)

这个初始化方法就是 __init__方法,__init__是对象的内置方法

2.初始化方法作用:为对象属性赋初始值以及快速赋值

在__init__方法内部使用 self. 属性名 = 属性的初始值就可以定义属性

class Emp:
    def __init__(self,no,name,salary):
#self. 属性名 = 属性的初始值。比如第一个前面的no是属性,后面的no是变量
        self.no=no
        self.name=name
        self.salary=salary
    def work(self):
        return '%s员工,工作努力,每月赚%d元钱'%(self.name,self.salary)

#定义对象后面括号的内容就是默认给初始化方法输入数据,而且快速的给属性赋值
emp1=Emp('1001','张小凡',12000)
str=emp1.work()
print(str)
print(emp1.no)

张小凡员工,工作努力,每月赚12000元钱
1001


作业1:通过定义类实现植物大战僵尸游戏制作,游戏如下图所示

import time
class Corpse:
    def __init__(self,name,blood,harm):
        self.name=name
        self.blood=blood
        self.harm=harm
    def bite(self):
        print('%s咬了一下,伤害值:%d'%(self.name,self.harm))
class Shooter:
    def __init__(self,name,blood,harm):
        self.name=name
        self.blood=blood
        self.harm=harm
    def bite(self):
        print('%s发射豌豆,伤害值:%d'%(self.name,self.harm))

s1=Shooter('豌豆射手',50,10)
s2=Shooter('冰冻射手',100,30)
c1=Corpse('普通僵尸',100,15)
c2=Corpse('铁通僵尸',120,40)
while s1.blood>0 and c1.blood>0:
    s1.bite()
    c1.blood-=s1.harm
    time.sleep(1)
    s1.bite()
    c1.blood -= s1.harm
    time.sleep(1)
    c1.bite()
    s1.blood-=c1.harm
    time.sleep(1)

if s1.blood>0:
        print('%s获胜,剩余血量%d'%(s1.name,s1.blood))
else:
        print('%s获胜,剩余血量%d' % (c1.name, c1.blood))

 豌豆射手发射豌豆,伤害值:10
豌豆射手发射豌豆,伤害值:10
普通僵尸咬了一下,伤害值:15
豌豆射手发射豌豆,伤害值:10
豌豆射手发射豌豆,伤害值:10
普通僵尸咬了一下,伤害值:15
豌豆射手发射豌豆,伤害值:10
豌豆射手发射豌豆,伤害值:10
普通僵尸咬了一下,伤害值:15
豌豆射手发射豌豆,伤害值:10
豌豆射手发射豌豆,伤害值:10
普通僵尸咬了一下,伤害值:15
普通僵尸获胜,剩余血量20

 作业2:创建员工类包括姓名、工资的属性和工作的方法,创建2个员工对象分别调用工作的方法,通过初始化方法为属性赋值。

class Emp:
    def work(self):
        print('%s努力工作,每月能赚%d元'%(self.name,self.salary))
    def __init__(self,name,salary):
        self.name=name
        self.salary=salary
e1=Emp('张小功',6000)
e2=Emp('王强',6500)
e1.work()
e2.work()

张小功努力工作,每月能赚6000元
王强努力工作,每月能赚6500元

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值