python面向对象基础(上)

Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。

1、面向对象(oop,object oriented programming)介绍

  • 面向过程:根据业务逻辑从上到下写代码
  • 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  • 面向对象编程:将数据与函数绑定到一起,进行封装,这样能够更快速的开发程序,减少了重复代码的重写过程.

面向对象分析

  • 面向过程和面向对象都是一种解决实际问题的思路。

洗车第一种方式:
强调的是步骤、过程、每一步都是自己亲自去实现的,这种解决问题的思路我们就叫做面向过程
洗车第二种的方式:
强调的是洗车店,由洗车店去帮我们洗车,过程不用我们自己去操心,对我们而言,我们并不必亲自实现整个步骤只需要调用洗车店就可以解决问题,这种解决问题的思路就是面向对象。

  • 面向过程的关注点是: 怎么做
  • 面向对象的关注点是: 谁来做
  • 面向对象编程(Object Oriented Programming-OOP)是一种解决软件复用的设计和编程方法。这种方法把软件系统中相近相似的操作逻辑和操作 应用数据、状态,以类的形式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。
  • **面向对象:**按人们认识客观世界的系统思维方式,采用基于对象(实体) 的概念建立模型,模拟客观世界分析、设 计、实现软件的办法。

2、类和对象的介绍

  • 就是一个模板,模板里可以包含多个函数,函数里实现一些功能
  • 对象则是根据模板创建的实例,通过实例对象可以执行类中的函数

类的组成:具有相同(或者类似)属性和行为的一系列对象的集合都可以抽像出一个类


对象:实实在在的一个东西。类的具象化的一种东西。

'''
类:类名,属性(特征),行为
class 类名:属性方法对象:对象可以访问属性,调用方法。
对象名 = 类名()
'''
# 创建类Person
class Person:# 特征和属性name='小明'age='16'# 行为def eat(self):   # 实例方法print('吃饭')passdef run(self):print('跑')pass
# 创建类Person的对象
xm=Person()
# 访问属性
print(xm.name)
print(xm.age)
# 调用行为的方法
xm.run()
xm.eat()

3、实例方法与属性

实例方法:
类的内部,使用 def 关键字可以定义一个实例方法,与一般函数定义不同,类方法必须包含参数 self(一般是self,也可以用其他,但是位置必须被占用),且为第一个参数。

属性:
类里面定义的变量。定义在类里面,方法外面的属性称之为类属性,定义在方法里面使用self引用的属性称之为实例属性(调用的时候没有差别也是xm.name

4、__init__方法

每创建一个对象都要添加属性,试想如果再创建一个对象的话,肯定也需要进行添加属性,显然这样做很费事,那么有没有办法能够在创建对象的时候,就顺便对象的属性给设置呢?

class People:def eat(self):print('喜欢吃榴莲!')  #行为pass
xq=People()   #创建一个对象
# 添加属性
xq.height=1.72
xq.name='小倩'
xq.sex='女'
print(xq.name,xq.height,xq.sex)
xq.eat()xm=People()
xm.name='小明'
xm.height=1.83
xm.sex='男'
print(xm.name,xm.height,xm.sex)
xm.eat()


__init__方法进行改进:

# 改进
class People:def __init__(self):# 实例属性self.name='小明'self.sex='男生'self.height=1.83passdef eat(self):'''吃的行为:return:'''print('爱吃榴莲')pass# 直接使用
xm=People()
print(xm.name,xm.height,xm.sex)
xm.eat()# 想修改
xm.name='小倩'
xm.sex='女'
print(xm.name,xm.height,xm.sex)
xm.eat()


如果init方法里面的属性固定了,每个类创建出来的对象属性都一样,这个时候我们是不是考虑将属性当参数在实例化对象的时候传进去,让类更通用?
使用__init__传参再进行改进

# 再改进
class People:def __init__(self,name,sex,height):# 实例属性self.name=nameself.sex=sexself.height=heightpassdef eat(self,food):'''吃的行为:return:'''print(self.name+'爱吃'+food)pass# 直接使用
xm=People('小明','男生',1.83)
print(xm.name,xm.height,xm.sex)
xm.eat('榴莲')


self和对象指向同一个内存地址,可以认为self就是对象的引用。

5、魔法方法

  • 在python中,有一些内置好的特定的方法,方法名是“__xxx__”,在进行特定的操作时会自动被调用,这些方法称之为魔法方法。
  • __init__方法:初始化一个类,在创建实例对象为其赋值时使用。
  • __str__方法:在将对象转换成字符串 str(对象) 测试的时候,打印对象的信息。
  • __new__方法:创建并返回一个实例对象,调用了一次,就会得到一个对象。
  • __class__方法:获得已知对象的类 ( 对象.class)。
  • __del__方法:对象在程序运行结束后进行对象销毁的时候调用这个方法,来释放资源。

__str__方法

# 创建一个动物类
class Animal:# 创建一个初始化方法def __init__(self,name,colour):self.name = nameself.colour = colour
dog = Animal('旺财','white')
# 实例化对象
print(dog)  # 直接打印对象,输出结果只一串类似id地址的信息。# 创建一个动物类
class Animal:# 创建一个初始化方法def __init__(self,name,colour):self.name = nameself.colour = colourdef __str__(self):return '我的名字叫{},我的颜色是{}'.format(self.name,self.colour)
dog = Animal('旺财','white')
# 实例化对象
print(dog)  # 直接打印对象,输出结果只一串类似id地址的信息。


__new__方法

# 创建一个动物类
class Animal:# 创建一个初始化方法def __init__(self,name,colour):self.name = nameself.colour = colourprint('......init函数执行。。。。。')def __str__(self):return '我的名字叫{},我的颜色是{}'.format(self.name,self.colour)def __new__(cls, *args, **kwargs):'''创建对象实例的方法,每调用一次就会生成一个新的对象,cls=class的缩写:param args::param kwargs::return:'''print('.......new函数的执行。。。。。')return object.__new__(cls)  # 没有这一行代码,下面是不会执行的
dog = Animal('旺财','white')
# 实例化对象
print(dog)  # 直接打印对象,输出结果只一串类似id地址的信息。


__new__方法__init__方法的区别:

  • __new__方法类的实例化方法,必须要返回该实例,否则对象就创建不成功;至少有一个参数cls,此参数在实例化中由python解释器自动提供
  • __init__方法 用来做数据属性的初始化工作,也可以认为是实例的构建方法,接受类的实例,self并对其进行构造

案例-决战紫禁之巅(双人对战)

'''
决战紫禁之巅有两个人物,西门吹雪以及叶孤城
属性:
name 玩家的名字
blood 玩家血量方法:
tong() 捅对方一刀,对方掉血10滴
kanren() 砍对方一刀,对方掉血15滴
chiyao() 吃一颗药,补血10滴
__str__ 打印玩家状态。
'''
import time  # 计时的模块
class hero:def __init__(self,name,blood):self.name=nameself.blood=bloodpass# 创建行为def tong(self,enemy):# 捅敌人一刀,敌人减掉10滴血enemy.blood-=10print('{}捅了{}一刀,{}掉了10滴血。'.format(self.name,enemy.name,enemy.name))passdef kairen(self,enemy):enemy.blood -= 15print('{}砍了{}一刀,{}掉了15滴血。'.format(self.name, enemy.name, enemy.name))passdef chiyao(self):# 自己吃药self.blood+=10print('{}吃了一颗药丸,补血10滴。'.format(self.name))pass# 打印英雄状态def __str__(self):return '{}还剩{}滴血量'.format(self.name,self.blood)# 创建2个对象(西门吹雪和叶孤城),实例化对象
xmcx=hero('西门吹雪',100)
ygc=hero('叶孤城',100)xmcx.tong(ygc)  # xmcx捅了ygc一刀
# 打印状态,没有str就输出的是类似id的东西
print(xmcx)
print(ygc)
print('*'*50)
# 两个开始互砍(重复执行)
xmcx.tong(ygc) # 西门吹雪捅叶孤城一刀
print(ygc) # 打印叶孤城的状态
print(xmcx) # 打印西门吹雪的状态
print('*' * 20)
ygc.kairen(xmcx) # 叶孤城砍西门一刀
print(ygc) # 打印叶孤城的状态
print(xmcx) # 打印西门吹雪的状态
print('*' * 20)
xmcx.chiyao()
print(ygc) # 打印叶孤城的状态
print(xmcx) # 打印西门吹雪的状态# 自动
while True:if xmcx.blood<=0 or ygc.blood<=0:# 满足条件退出循环breakxmcx.tong(ygc)  # 西门吹雪捅叶孤城一刀print(ygc)  # 打印叶孤城的状态print(xmcx)  # 打印西门吹雪的状态print('*' * 20)ygc.kairen(xmcx)  # 叶孤城砍西门一刀print(ygc)  # 打印叶孤城的状态print(xmcx)  # 打印西门吹雪的状态print('*' * 20)xmcx.chiyao()print(ygc)  # 打印叶孤城的状态print(xmcx)  # 打印西门吹雪的状态time.sleep(1)  # 循环一次暂停1秒
print('游戏结束')

作业

1、python中如何通过类创建对象,请用代码举例说明。如何在类中定义一个方法,请用代码举例说明。

class Student:def run(self):print('学生每天跑步2公里。')passpass
xm=Student()  # 创建对象
xm.run()

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

class Fruit:def __init__(self,name,color):self.name=nameself.color=colorpassdef __str__(self):return '{}是{}的。'.format(self.name,self.color)pass
pg=Fruit('苹果','红色')
jz=Fruit('橘子','橙色')
xg=Fruit('西瓜','绿色')
print(pg)
print(xg)
print(jz)

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

class person:def weight(self):print('self=%d'%id(self))passpass
li=person()
li.weight()
print('li=%d'%id(li))

4、定义一个Animal类 (1)、使用__init__初始化方法为对象添加初始属性。如颜色,名字,年龄。 (2)、定义动物方法,如run,eat等方法。如调用eat方法时打印xx在吃东西就可以。(3)、定义一个__str__方法,输出对象的所有属性。


class Animal():def __init__(self,name,color,age):self.name=nameself.color=colorself.age=agepassdef eat(self):print('{}在吃东西。'.format(self.name))passdef run(self):print('{}在吃奔跑。'.format(self.name))passdef __str__(self):return '{}的颜色是{}的,今年{}岁了。'.format(self.name,self.color,self.age)pass
lh=Animal('老虎','黄色','5')
lh.eat()
lh.run()
print(lh)
print('*'*50)
sz=Animal('狮子','金色','2')
sz.eat()
sz.run()
print(sz)
print('*'*50)

求知讲堂python+人工智能day7相关推荐

  1. 求知讲堂python+人工智能 99天完整版 学完可就业+某某教程Python 100例————作业(持续更新)

    个人答案仅供参考,不喜勿喷. 求知讲堂python+人工智能 99天完整版 学完可就业 1.day1 1. import random index=1 error=0 age=random.randi ...

  2. 求知讲堂python+人工智能day4

    python函数 基本上所有的高级语言都支持函数,Python也不例外.Python不但能非常灵活地定义函数,而且本身内置了很多有用的函数,可以直接调用.函数就是最基本的一种代码抽象的方式. 1.函数 ...

  3. 求知讲堂python+人工智能day8

    面向对象基础(中) 相信大家都有这样的经历:我们进入一家商店的时候经常会听到一个喇叭播放说,欢迎光临,当我们出商店的时候也会提醒说欢迎光临,现实中这是通过感应器触发的,但是在程序中我们是如何触发实现呢 ...

  4. 求知讲堂python+人工智能day11

    文件操作与模块 文件操作是很常见的功能,我们python当然也支持,python自带文件的基本操作方法,但是借助os等模块更加方便快捷.在学习过程中,我们时不时会用到模块,这里也将详细讲解模块.常用模 ...

  5. 求知讲堂python+人工智能day6

    Python内置函数 任何一门编程语言的核心操作都是操作内存中的数据,但内存中的数据又是通过编程语言的API来实现,所谓的API,就是系统提供给我们的函数,有一种函数是系统预先定义的函数,也就是我们安 ...

  6. 求知讲堂python+人工智能day5

    Python函数2 1.函数的基本类型 2.全局变量和局部变量 局部变量 就是在函数内部定义的变量(作用域仅仅在函数内部): 不同的函数可以定义相同的局部变量,互不影响. 作用:为了临时的保存数据,需 ...

  7. 如何学习python+人工智能

    做个自我介绍,我13年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了.13年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了 ...

  8. 哈佛大学(2020)《CS50 Python人工智能入门》课程资料下载

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本课程探讨现代人工智能基础上的概念和算法,深入探讨游戏引擎.手写识别和机器 ...

  9. 干货丨机器学习必备:前20名Python人工智能和机器学习开源项目

    如今机器学习和人工智能已经变得家喻户晓,有很多爱好者进入了该领域.但是,什么才是能够进入该领域的正确路径呢?如何保持自己跟上该领域的发展步伐呢? 为了解决以上两个问题,可以通过利用高级专业人员每天使用 ...

最新文章

  1. ElasticSearch Java Api(三) -更新索引库
  2. __name__ ==“ __main__”怎么办?
  3. java整合mybatis,springboot集成mybatis
  4. IE9浏览Flash页面时显示错位并不停地闪烁
  5. SAP License:SAP记账码
  6. 生成drl文件_Allegro生成Gerber文件的方法
  7. 99路无线极呼叫服务器怎么对码,99路多功能无线呼叫服务器
  8. RGB与十六进制颜色进行互转
  9. 动词ing形式的5种用法_动词ing形式的用法及变化规则 | 学思外教
  10. python关于类和对象说法正确的是_关于类和对象的关系,下列描述正确的是()。
  11. java速算24,java枚举速算24正解集合
  12. 科研小助手PubMed的插件PubMedy
  13. java 判断图片否旋转,Java实现图片任意角度旋转
  14. 吴恩达《深度学习专项》笔记(十一): CNN示例学习:VGG, ResNet, MobileNet
  15. Archlinuxarm / AUR的国内镜像源(for Banana Pi / Raspberry Pi , etc)(更新)
  16. 【杂谈】诗集序以及一点杂谈
  17. 歪解Activity生命周期-----初学者彻底理解指南
  18. FinalShell 远程桌面连接虚拟机 Win 7
  19. 三角形已知两边一斜角时求第三边的公式
  20. 中国的高级软件工程师你们难道上网只看技术吗?悲哀啊。

热门文章

  1. win11系统安装solidworks2018
  2. 使用Python调用ChatGPT
  3. 大学生生活总结与日后规划
  4. 盘锦市高2021年高考成绩查询,2021年盘锦高考状元名单公布,盘锦文理科状元是谁多少分...
  5. 二手车交易系统数据库的表格设计
  6. 【暑期每日一题】洛谷(一)
  7. 由浅入深玩转华为WLAN—24 客户端(STA)黑白名单限制无线客户端接入
  8. Python爬虫总结——Scrapy+Gerapy部署网络爬虫
  9. ChatGPT 引领的 AI 革命爆发了,一起上车吧!
  10. 扬帆牧哲:怎样开网店创业?