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中bisect模块用法实例
Sep 25 Python
Python循环语句中else的用法总结
Sep 11 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
Python3实战之爬虫抓取网易云音乐的热门评论
Oct 09 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
python2与python3共存问题的解决方法
Sep 18 Python
python3使用pandas获取股票数据的方法
Dec 22 Python
Python lambda表达式用法实例分析
Dec 25 Python
对Python使用mfcc的两种方式详解
Jan 09 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
python数据库编程 Mysql实现通讯录
Mar 27 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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
THINKPHP支持YAML配置文件的设置方法
2015/03/17 PHP
php操作redis缓存方法分享
2015/06/03 PHP
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
JQuery 操作select标签实现代码
2010/05/14 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
javascript 窗口加载蒙板 内嵌网页内容
2010/11/19 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
plupload+artdialog实现多平台上传文件
2016/07/19 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
jquery easyui如何实现格式化列
2017/07/30 jQuery
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
Cookbook组件形式:优化 Vue 组件的运行时性能
2018/11/25 Javascript
python f-string式格式化听语音流程讲解
2019/06/18 Python
python中的global关键字的使用方法
2019/08/20 Python
python3 使用Opencv打开USB摄像头,配置1080P分辨率的操作
2019/12/11 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
Python利用逻辑回归分类实现模板
2020/02/15 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
css图标制作教程制作云图标
2014/01/19 HTML / CSS
移动通信行业实习自我鉴定
2013/09/28 职场文书
怎么写有吸引力的自荐信
2013/11/17 职场文书
制衣厂各岗位职责
2013/12/02 职场文书
营业员演讲稿
2013/12/30 职场文书
外贸员简历中的自我评价
2014/03/04 职场文书
工作决心书
2014/03/11 职场文书
担保书格式
2015/01/20 职场文书
2015年检验科工作总结
2015/04/27 职场文书
django如何自定义manage.py管理命令
2021/04/27 Python
pytorch 中nn.Dropout的使用说明
2021/05/20 Python