个人python学习-Day7面向对象基础(上)

一、面向对象介绍

1.概述

  • 面向过程:根据业务逻辑从上到下写代码

  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可

  • 面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程

面向对象编程:OOP【object oriented programming】是一种python的编程思想,所有的事情打包给别人去做

面向过程:就是我们一开始的,按照解决问题的步骤去写代码,就是自己亲力亲为,一步一步的去解决问题

2.面向过程编程与函数式编程对比

3.面向过程与面向对象对比

面向对象:关注的是设计思维【找洗车店、给钱就可以洗车了,我们并不要求去让自己理解洗车的步骤】

4.面向对象分析

5.面向对象与面向对象编程

二、类和对象

1.简介

  • 类和对象是面向对象编程中重要的概念

  • 类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

  • 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

2.类的组成部分

类:是具有一组相同或者相似特征【属性】和行为【方法】的一系列对象的集合

对象:是类的实例化,是实实在在的

类是对象的抽象化,对象是类的具体化

3.类的抽象

三、定义类和对象

1.定义类

class Person():
    #属性
    name='林然'
    age=18
    def printInfo(self):
        print('{}的年龄是:{}'.format(self.name,self.age))

2.创建对象

class Person():
    #属性
    name='林然'
    age=18
    def printInfo(self):
        print('{}的年龄是:{}'.format(self.name,self.age))
#创建对象
lr=Person()
lr.printInfo()#方法使用

结果:

四、实例方法与属性

1.实例方法

实例方法:在类的内部使用def关键字定义的方法,并且该方法的第一个参数默认是self【名字标识可以是其他名字,但是这个位置必须被占用】,类的实例方法是归于类的方法

2.属性

属性:在类内部,方法外部定义的变量,定义在方法内部使用self引用的属性【self.属性】就是实例属性

五、__init__方法

1.类的属性可以追加

class People:
    def eat(self):
        '''
        吃的行为
        :return:
        '''
        print('喜欢吃辣条')
        pass
lr=People()
lr.name='林然'#追加实例属性
lr.sex='男生'#追加实例属性
lr.age=18#追加实例属性
lr.eat()
print(lr.name,lr.sex,lr.age)
xl=People()
xl.name='林然'#追加实例属性
xl.sex='男生'#追加实例属性
xl.age=18#追加实例属性
#如果有多个这样的对象被实例化,那么就需要添加很多次这个的操作,显然是麻烦的

2.__init__(self) 方法

class People:
    def __init__(self):
        '''
        系统在创建对象时,自动调用
        '''
        self.name='小倩'
        self.sex='女生'
        self.age=20
        pass
    def eat(self):
        '''
        吃的行为
        :return:
        '''
        print('喜欢吃辣条')
        pass

xm=People()
print(xm.name)#直接输出的是默认值,就已经含有该属性了
xm.name='小明'
print(xm.name)

3.__init__传参

class People:
    def __init__(self,name,sex,age):
        '''
        系统在创建对象时,自动调用
        '''
        self.name=name
        self.sex=sex
        self.age=age
        pass
lm=People('李明','男',18)#这样不同的对象就有不同的特征值
print(lm.name,lm.sex,lm.age)

4.总结:__init__

  • python自带的内置函数,具有特殊的函数,使用双下划线包起来的也称为【魔术方法】

  • 是一个初始化的方法,用来定义实例属性和初始化数据的,在创建对象的时候自动调用,不需要手动调用

  • 利用传参的机制可以让我们定义功能更加强大并且更加方便

六、理解self

1.self是什么?

class Person():
    '''
    定义类
    '''
    def eat(self):#
        '''
        实例方法
        :return:
        '''
        print('self=%s'%id(self))
        pass
    pass
xw=Person()#实例化对象
print('xw=%s'%id(xw))
xw.eat()

也就是self和实例化对象是同一个东西

2.self传参问题

class Person():
    '''
    定义类
    '''
    def eat(self,name,food):#
        '''
        实例方法
        :return:
        '''
        print('%s 喜欢吃 %s'%(name,food))
        pass
    pass
xw=Person()#实例化对象
xw.eat('林然','苹果')

3.小结

  • self只有在类中定义实例方法的时候才有意义,在调用时候不必传入相应的参数,而是由解释器自动去指向

  • self的名字是可以更改的,可以定义成其他的名字,只是约定俗成地定义成了self

  • self指的是实例化本身,就类似于JAVA中的this

七、魔术方法

1.概述

2.__str__方法

class Person():
    '''
    定义类
    '''
    def __init__(self,name,food):
        self.name=name
        self.food=food
    def __str__(self):
        '''
        打印对象,自定义对象的内容输出
        :return:
        '''
        return '%s 喜欢吃 %s'%(self.name,self.food)

xw=Person('小王','苹果')#实例化对象
print(xw)

输出结果:

3.__new__方法

在我们的__new__方法,只是输出了信息,所以并没创建对象,也就是对象创建失败了,所以Init方法也就木有

class Person():
    '''
    定义类
    '''
    def __init__(self,name,food):
        print('init执行了')
        self.name=name
        self.food=food
    def __str__(self):
        '''
        打印对象,自定义对象的内容输出
        :return:
        '''
        return '%s 喜欢吃 %s'%(self.name,self.food)
    def __new__(cls, *args, **kwargs):
        '''
        创建对象实例的方法,每调用一次就会生成新的对象,cls就是class的缩写
        :param args:
        :param kwargs:
        '''
        print('执行的new方法')

xw=Person('小王','苹果')#实例化对象
print(xw)

也就是要先有对象,执行new,采用实例化init

class Person():
    '''
    定义类
    '''
    def __init__(self,name,food):
        print('init执行了')
        self.name=name
        self.food=food
    def __str__(self):
        '''
        打印对象,自定义对象的内容输出
        :return:
        '''
        return '%s 喜欢吃 %s'%(self.name,self.food)
    def __new__(cls, *args, **kwargs):
        '''
        创建对象实例的方法,每调用一次就会生成新的对象,cls就是class的缩写
        :param args:
        :param kwargs:
        '''
        print('执行的new方法')
        return object.__new__(cls)#这里是真正创建,当我们不显示创建这个函数,编译器会自动创建
        #场景:可以控制创建对象的一些属性限定,经常用来做单例模式的时候来使用

xw=Person('小王','苹果')#实例化对象
print(xw)

__new__和__init__函数的区别

__new__类的实例化方法,必须要返回该实例,否则对象就会创建不成功

__init__用来做数据属性初始化工作,也可以认为是实例的构造方法,接受类的实例,接受类的实例self并对其进行构造

__new__至少要一个参数是cls代表要实例化的类,此参数是在实例化时由Python解释器自动提供

八、项目实战-决战紫禁之巅

1.需求分析

2.实现步骤

3.实际代码

'''
决战紫禁之巅有两个人物,西门吹雪以及叶孤城
属性:
name 玩家的名字
blood 玩家血量

方法:
tong() 捅对方一刀,对方掉血10滴
kanren() 砍对方一刀,对方掉血15滴
chiyao() 吃一颗药,补血10滴
__str__ 打印玩家状态。

'''
#第一步:需要先去定义一个类【角色类】
import time#导入时间的包
class Role:
    def __init__(self,name,hp):
        '''

        :param name: 角色名
        :param hp: 血量
        '''
        self.name=name
        self.hp=hp
        pass
    def __str__(self):
        return '%s的血量:%d'%(self.name,self.hp)
    def tong(self,enemy):
        '''
        捅他
        :param enemy: 敌人
        :return:
        '''
        #敌人减掉10滴血
        enemy.hp-=10
        info='【%s】捅了【%s】一刀'%(self.name,enemy.name)
        print(info)
        pass
    def kanren(self,enemy):
        '''
        砍人
        :param enemy:
        :return:
        '''
        enemy.hp -= 15
        info = '【%s】砍了【%s】一刀' % (self.name, enemy.name)
        print(info)
        pass
    def chiyao(self):
        '''
        吃药
        :param enemy: 敌人
        :return:
        '''
        self.hp+=10
        info = '【%s】吃了一颗补药,增加十滴血' % (self.name)
        print(info)
        pass
 #第二步,创建两个实例化对象【西门吹雪、叶孤城】
xmcx=Role('西门吹雪',100)
ygc = Role('叶孤城', 100)
while True:
    if xmcx.hp<=0 or ygc.hp<=0:
        break
    xmcx.tong(ygc)#西门吹雪捅了叶孤城一刀
    print(xmcx)#打印对象状态
    print(ygc)
    print('***********************************')
    ygc.kanren(xmcx)
    print(xmcx)#打印对象状态
    print(ygc)
    print('***********************************')
    xmcx.chiyao()
    print(xmcx)#打印对象状态
    print(ygc)
    print('***********************************')
    time.sleep(1)#休眠一秒
print('对战结束')

结果;

九、知识点小结

知识点总结1

知识点总结2

十、课后问答题

  1. 什么是类,什么是对象

类就是一个模板,模板里可以包含多个函数,函数里实现一些功能

对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

  1. python中定义一个类的语法格式是什么

class 类名():

方法列表

属性

3、类(class)由哪三个部分构成

类名

属性

方法

4、init方法有什么作用,如何定义

是一个初始化的方法,用来定义实例属性和初始化数据的,在创建对象的时候自动调用,不需要手动调用

5、方法中的"self"代表什么

实例化对象本身

6、在类中定义init方法的时候第一个形参必须是self吗?self可以用其他东西代替吗?

是的,self的那个位置可以用其他的名称代替

7、Python面向对象中的魔法方法,是如何定义的,魔法方法需要开发人员去调用吗?

不需要,编译器自动调用

8、str方法可以没有返回值,这句话是否正确?

不正确

9、查看下面代码,请写出有那些是属性,那些是实例方法。

十一、实训题

  1. python中如何通过类创建对象,请用代码举例说明。

2、如何在类中定义一个方法,请用代码举例说明。

class Student():
    def run(self):
        print('加油')
        pass
    pass
lr=Student()#创建一个对象
lr.run()

3、定义一个水果类,然后通过水果类,创建苹果对象、橘子对象、西瓜对象并分别添加上颜色属性

class fruit():
    def __init__(self,name,color):
        self.name=name
        self.colro=color
        pass
    def __str__(self):
        return '%s的颜色是%s'%(self.name,self.colro)
    pass
pg=fruit('苹果','红色')
print(pg)
print('*'*20)
jz=fruit('桔子','橙色')
print(jz)
print('*'*20)
xg=fruit('西瓜','黑皮')
print(xg)

4、请编写代码,验证self就是实例本身。

class Person():
    def print_self(self):
        print('self=%s'%(id(self)))
p1=Person()
print('p1=%s'%(id(p1)))
p1.print_self()

5、定义一个Animal类

(1)、使用__init__初始化方法为对象添加初始属性。如颜色,名字,年龄。

(2)、定义动物方法,如run,eat等方法。如调用eat方法时打印xx在吃东西就可以。

(3)、定义一个__str__方法,输出对象的所有属性。

'''
(1)、使用__init__初始化方法为对象添加初始属性。如颜色,名字,年龄。
(2)、定义动物方法,如run,eat等方法。如调用eat方法时打印xx在吃东西就可以。
(3)、定义一个__str__方法,输出对象的所有属性。
'''
class Animal():
    def __init__(self,color,name,age):
        self.color=color
        self.name=name
        self.age=age
    def __str__(self):
        return '%s的颜色是%s,年龄是%s'%(self.name,self.color,self.age,)
    def run(self):
        print('%s在跑'%self.name)

    def eat(self):
        print('%s在吃' % self.name)
monkey=Animal('金色','猴子','3')
print(monkey)
monkey.run()
monkey.eat()

6、请将课件上 决战紫荆之巅 重写一遍,并理解每一个方法的使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜菜小林然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值