Python面向对象思想与应用入门教程【类与对象】


Posted in Python onApril 12, 2019

本文实例讲述了Python面向对象思想与应用。分享给大家供大家参考,具体如下:

面向对象思想

1、面向对象的设计思想

面向对象是基于万物皆对象这个哲学观点。

2、面向对象和面向过程的区别

面向过程

在生活中:
它是一种看待问题的思维方式,在思考问题的时候,着眼问题是怎样一步一步解决的,然后亲力亲为去解决问题[类似于公司里的执行者]。
在程序中:
​ 代码是从上而下顺序执行,各个模块之间的关系尽可能简单,在功能上相对独立,程序的流程在写程序的时候就已经决定。

面向对象

在生活中:
它是另一种看待问题的方式,它着眼于找到一个具有特殊功能的个体,然后委托这个个体去帮你完成某件事.这更符合人类思考习惯的思想[指挥者]。
在程序中:
把数据以及对数据的操作方法放在一起,作为一个相互依存的整体?对象;
把同类的对象进行抽象出其共性,形成类;
类中大多数数据,只能用本类的方法进行处理;
类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行通信;
程序执行的流程由用户在使用的过程中决定;
使用面向对象思想进行开发,需要先找到具有所需功能的对象来使用,如果这个对象不存在,那么则需要创建这么一个具有所需功能的对象。
注意:面向对象只是一种思想,并不是一门编程语言。

区别总结

a. 都是看待问题的一种思维方式,都能解决问题;
b. 面向过程着眼于所有的事情亲力亲为;
c. 面向对象着眼于找到一个具有特殊功能的对象,委托这个对象实现你需要实现的功能。

python语言是面向对象的程序设计语言,类和对象是面向对象的核心。

类和对象

1、类和对象的概念

类:一个具有特殊功能的实体的集合[群体]。

对象:在一个类中,一个具有特殊功能的实体,能够帮忙解决特定的问题,对象通常也被称为实例。

两者之间的关系:类用于描述某一对象的共同特征,而对象则是类的具体存在。

举例:

学生 张三、李四
快递 顺丰、韵达

总结:

类与对象的关系:

a.类是对象的抽象,对象是类的具体体现。
b.类也是一种数据类型,只不过是自己定义的,类似与number,string等,它本身并不占用空间,但是它的实例[对象]是占用空间的。

2、类的定义

格式:

class 类名(object):
​ 类体

说明:

a.python中使用class关键字定义类;

b.类名只要是一个合法的标识符即可,命名规则遵循”大驼峰式命名”【每个单词的首字母大写】;

c.尽量使用单个或者多个有意义的单词连接而成

演示

# 一个简单的类的实例
class Person():
  print("hello")

3、类的设计

只需要关心3样东西

1.事物名称[类名]: 如人类 (Person);
2.特征(属性): 如身高(height) 年龄(age)等 ——>名词;
3.行为(方法): 如跑(run) 说话(say) —————>动词。

类中的方法和属性

1、方法和属性的定义

生活中描述事物的无非就是描述事物的特征和行为。

python中用类来描述事物也是如此,前面已经定义了类,但是,如果只有类单独存在,没有任何意义,所以定义类其实就是定义类中的成员[成员变量和成员方法]。

在类中的变量我们称之为成员变量,在类中的方法我们称之为成员方法(函数)。

成员变量—>类具有的特征 例如:人—>身高,性别,体重。

成员方法 —>类具有的行为 例如人—>吃喝玩乐。

因此,拥有相同的(或者类似)属性和行为的对象都可以抽取出一个类。

class Persion():
  #成员变量,初始值就是相当于默认值
  name = ""
  age = 0
  height = 0
  weight = 0
  #成员方法
  #在类的内部,使用def关键字来定义的一个方法
  #注意:区别于普通方法,类中方法的参数必须包含参数self,且为第一个参数
  #self代表类的实例(某个对象)
  def run(self):
    print("run")
  def eat(self, food):
    print("eat",food)
  def sleep(self):
    print("sleeping")

说明:定义了类,并在类中定义了成员变量和成员方法,但是成员变量和成员方法是如何使用的呢?

2、方法和属性的使用

2.1、实例化对象:

前面说过,对象是实实在在的个体,负责去完成某件指定的事情。

对象的创建的过程又被称作对象的实例化过程。

语法:

对象名 = 类名()

'''
实例化对象
格式: 对象名 = 类名()
注意: 没有参数的时候,小括号也不能省略
'''
#实例化一个对象
pre1 = Person()
print(pre1)
print(type(per1))
print(id(per1))
per2 = Person()
print(per2)
print(type(per2))
print(id(per2))

3、对象调用方法和属性

per = Preson()
'''
访问属性
格式:对象名.属性名
赋值:对象名.属性名 = 新值
'''
per.name = 'lili'
per.age = 18
per.height = 160
per.weight = 80
print(per.name, per.age, per.height, per.weight)
'''
访问方法
格式:对象名.方法名(参数列表)
'''
per.run()
per.eat("apple")
per.sleep()
#问题:目前来看Person创建的所有对象属性都是一样的
per2 = Person()
print(per2.age)
per3 = Person()
print(per3.age)

总结:

访问变量采用: 对象名.属性名;
访问方法采用: 对象名.方法名(参数列表)。

4、内存中的对象

per = Person()

说明:程序中定义Person类型的变量per实际是一个变量名,它被存放在栈内存中,它指向实际的Person对象,而真正的Person对象则存放在堆内存中。

综合练习:

第一天开学,介绍一下你自己其中包括姓名,年龄以及爱好

#学生类
class Student():
  #特征:成员变量
  self.name = ""
  self.age = ""
  self.hobby =""
  def introduce(self,name, age, hobby):
    print("大家好,我是%s,今年%d岁,爱好是%s"%(name,age, hobby))
  def singsong(self):
    print("娘子~啊哈")
  def dance(self):
    print("广场舞跳起来...")
  def lie(self):
    print("我家特别穷,我小时候就一直在放牛,只有几万头....")
# 类实例化
stu = Student()
# 成员方法调用
stu.introduce('ldc',18,'跑步')
stu.singsong()
stu.dance()
stu.lie()

输出:

大家好,我是ldc,今年18岁,爱好是跑步
娘子~啊哈
广场舞跳起来...
我家特别穷,我小时候就一直在放牛,只有几万头....

如何查看所有属性和方法

class Test():
  def __init__(self,name):
    self.name = name
  def test(self):
    print('testing...')
test = Test('测试')
# 查看所有属性和方法
list1 = dir(test)
# 检查实例是否有这个属性
print(hasattr(test, 'name'),hasattr(test, 'test'),hasattr(test, 'tt'))
# 设置属性值
setattr(test,'name','测试2')
# 获取属性值
print(getattr(test, 'name'))

输出:

True True False
测试2

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
简介Python设计模式中的代理模式与模板方法模式编程
Feb 02 Python
Python subprocess模块详细解读
Jan 29 Python
基于python批量处理dat文件及科学计算方法详解
May 08 Python
Python 获取div标签中的文字实例
Dec 20 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Django工程的分层结构详解
Jul 18 Python
Django model 中设置联合约束和联合索引的方法
Aug 06 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
Aug 09 Python
关于ZeroMQ 三种模式python3实现方式
Dec 23 Python
Python如何使用paramiko模块连接linux
Mar 18 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
Python实现的登录验证系统完整案例【基于搭建的MVC框架】
Apr 12 #Python
Python实现的银行系统模拟程序完整案例
Apr 12 #Python
详解python--模拟轮盘抽奖游戏
Apr 12 #Python
Python实现的排列组合、破解密码算法示例
Apr 12 #Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 #Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
Apr 11 #Python
详解python执行shell脚本创建用户及相关操作
Apr 11 #Python
You might like
php常用的url处理函数总结
2014/11/19 PHP
php生成word并下载代码实例
2019/03/15 PHP
laravel实现Auth认证,登录、注册后的页面回跳方法
2019/09/30 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
在JQuery dialog里的服务器控件 事件失效问题
2010/12/08 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
JavaScript获取服务器时间的方法详解
2016/12/11 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
JavaScript实现图片本地预览功能【不用上传至服务器】
2017/09/20 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
一些可能会用到的Node.js面试题
2019/06/15 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
JS数组Reduce方法功能与用法实例详解
2020/04/29 Javascript
[02:44]DOTA2英雄基础教程 钢背兽
2013/12/19 DOTA
[42:50]NB vs VP 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[02:06]2018完美世界全国高校联赛秋季赛开始报名(附彩蛋)
2018/09/03 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
python实现图片批量剪切示例
2014/03/25 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
python pycharm的安装及其使用
2019/10/11 Python
python中有函数重载吗
2020/05/28 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
俄罗斯厨房产品购物网站:COOK HOUSE
2021/03/15 全球购物
护士检查书
2014/01/17 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
民政局个人整改措施
2014/09/24 职场文书
2014年党务公开工作总结
2014/12/09 职场文书
2016年中学植树节活动总结
2016/03/16 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
Oracle 触发器trigger使用案例
2022/02/24 Oracle
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技