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代码真的很爽
Aug 26 Python
tornado框架blog模块分析与使用
Nov 21 Python
利用Python绘制MySQL数据图实现数据可视化
Mar 30 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
python之信息加密题目详解
Jun 26 Python
python使用百度文字识别功能方法详解
Jul 23 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
Python callable内置函数原理解析
Mar 05 Python
python简单实现最大似然估计&scipy库的使用详解
Apr 15 Python
django前端页面下拉选择框默认值设置方式
Aug 09 Python
python之基数排序的实现
Jul 26 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
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
Centos PHP 扩展Xchche的安装教程
2016/07/09 PHP
thinkPHP+LayUI 流加载实现功能
2019/09/27 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
jQuery $.each的用法说明
2010/03/22 Javascript
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
快速排序 php与javascript的不同之处
2011/02/22 Javascript
js对象的比较
2011/02/26 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
JavaScript自执行函数和jQuery扩展方法详解
2017/10/27 jQuery
基于JavaScript实现五子棋游戏
2020/08/26 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
webstorm+vue初始化项目的方法
2018/10/18 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
python获取一组数据里最大值max函数用法实例
2015/05/26 Python
Python中map和列表推导效率比较实例分析
2015/06/17 Python
python生成式的send()方法(详解)
2017/05/08 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
Python中的list与tuple集合区别解析
2019/10/12 Python
Python 字节流,字符串,十六进制相互转换实例(binascii,bytes)
2020/05/11 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
FC-Moto西班牙:摩托车手最大的购物场所之一
2019/04/11 全球购物
大学考试作弊检讨书
2014/01/30 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
环保标语口号
2014/06/13 职场文书
先进教师个人总结
2015/02/11 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript