Python基础(十八):面向对象“类”第一课
记住:编写函数就是“面向过程”,编写类就是“面向对象”。类也是很多同学的一大学习难点,因此我这里还是准备带着大家学习一下。
类和对象对比
对象 : 具有行为和属性。在进行描述的时候,属性:多体现为名词。行为:多体现为动词。
类 : 指的是一个类别。具有相同属性和行为的“对象”构成的一个整体。
类与对象之间的关系:
- ① 类是对象的抽象表现,对象是类的具体表现。
- ② 类是设计的蓝图,对象就是该蓝图设计出的具体产物。
类的定义
说了半天:类、类、类,真的有点累,那么Python中是怎么定义类的呢?
class 类名:
def 方法1(self):
def 方法2(self):
......
def 方法n(self):
上述是一个类的基本结构,不知道没关系,先有一个主观印象,我们接着往下面学习。
类中可以定义“属性”和“行为”:
- 属性:通过定义变量来表示。
- 行为:通过方法(就是所说的"函数")来表示。
这里还有几点,需要注意的:
- 注意1 :其实,方法就是函数。只不过函数,是面向过程的称呼;方法,是面向对象的称呼。
- 注意2 :函数,不依赖于一个类的对象。方法,依赖于一个类的对象。
下面定义一个简单的类:
class Person:
def walk(self): # self 后面再介绍是什么意思。
print("走路")
def run(self):
print("跑步")
上面这个Person类,还不能做任何事情。我们说了:定义好的类相当于设计蓝图,图纸必须线下生产,才能制造出实物。
线下生产指的就是,用类创建一个对象,也就是我们常说的“实例化”对象。
实例化对象
如何实例化对象呢?在正式讲述这个知识点之前,我们直接看语法:
# 语法:类名()
# 对于上述的Person类,如何实例化对象呢?
Person()
脑补一下“汽车图纸” 和 “汽车’之间的关系。
定义的类,好比是汽车图纸。但是光有图纸不行呀,我们要造汽车,因此需要实例化对象(相当于造车)。
拿到真实的汽车后,我们肯定要去做其他的事儿,比如开车,听音乐,听广播,看视频。实际中,我们可以直接操作车,但是在Python代码中,我们用一个变量,来接受”实例化“对象,它就表示那个汽车。
然后,我们可以拿着这个变量,调用类中的放音乐方法,放视频方法,去实现对应的功能。
class Person:
def walk(self): # self 后面再介绍是什么意思。
print("走路")
def run(self):
print("跑步")
# 类名 + () : 相当于用类创建了一个对象。
p = Person()
这里先来看一个简单的例子,self不懂可以先不管。这里来讲述一下上述例子:
- ① 我们定义了一个Person类,类中定义了一个“走路”的方法,还定义了一个“跑步”的方法。
- ② 下面我们使用Person()实例化了一个“类”对象,相当于造了一个人,此时用变量p去接收,那么你可以将这个p当作是这个人。
调用类中的方法,实现类中的功能:
直接使用“.”点,可以直接调用类中的方法。
p.walk()
p.run()
结果如下:
一个类(蓝图)可以创建多个类
上面提到的p,只是类(蓝图)创建出来的一个对象而已,但是这一个类蓝图,肯定不只创建一个对象,我们每实例化一次,就是一个新的对象。
# 再创建p1、p2......pn个对象。
p1 = Person()
p2 = Person()
......
pn = Person()
特别注意:
这些对象之间,既有共同点,也有不同点:
- 共同点:对于类中的属性和方法,是这些类的公共财产,大家都可以使用;
- 不同点:对于不同对象新增的属性和方法,属于不同对象的私有财产;
接着,我就为大家讲述”如何动态增加属性和方法“。
为“对象”动态增加属性
我们现在不仅有了一个Person类(蓝图),也有一个类对象p(实物)。此时我们只知道他有一个walk()方法,一个run()方法。如果我们想给p对象增加一个“姓名”,一个“属性”,应该怎么办呢?
这里先讲述如何“动态增加属性”:
# 创建一个类
class Person:
def walk(self): # self 后面再介绍是什么意思。
print("走路")
def run(self):
print("跑步")
# 创建一个类对象
p = Person()
# 动态增加一个属性和方法
p.name = "张三"
p.age = 10
可以看到,我们还是使用“.”点,直接在新增属性的同时,为新属性赋值。
访问新增属性
新增属性后,我们再使用“.”点,访问各自的新增属性。
print(p.name, p.age)
结果如下:
新增属性只属于p,其他对象无法访问
上面我们给对象p新增了name和age属性。此时,我们再次新创建一个对象p1,那么它是否可以访问name和age属性呢?
p1 = Person() # 表示又创建了一个新的对象p1。
p1.walk()
p1.run()
print(p1.name, p1.age)
# p新增的属性只属于p本身所有。但类中方法却是公有的, p1也可以访问。
结果如下:
Python基础(十八):面向对象“类”第一课的更多相关文章
- python 基础(十) 面向对象
面向对象 一.概念 类(class): 用来描述具有相同属性和方法的对象的集合 对象是类的实例化 类变量:类变量在整个实例化的对象中是共用的.定义在类中 并且是函数体外的 实例变量:只能作用于 当前类 ...
- Python进阶(十五)----面向对象之~继承(单继承,多继承MRO算法)
Python进阶(十五)----面向对象之~继承 一丶面向对象的三大特性:封装,继承,多态 二丶什么是继承 # 什么是继承 # b 继承 a ,b是a的子类 派生类 , a是b的超类 基类 父类 # ...
- Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)
Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装: 将一些东西封装到一个地方,你还可以取出来( ...
- Bootstrap <基础十八>面包屑导航(Breadcrumbs)
面包屑导航(Breadcrumbs)是一种基于网站层次信息的显示方式.以博客为例,面包屑导航可以显示发布日期.类别或标签.它们表示当前页面在导航层次结构内的位置. Bootstrap 中的面包屑导航( ...
- python基础——实例属性和类属性
python基础——实例属性和类属性 由于Python是动态语言,根据类创建的实例可以任意绑定属性. 给实例绑定属性的方法是通过实例变量,或者通过self变量: class Student(objec ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...
- python基础教程总结6——类
1. 如何定义一个类 在进行python面向对象编程之前,先来了解几个术语:类,类对象,实例对象,属性,函数和方法. 类是对现实世界中一些事物的封装,定义一个类可以采用下面的方式来定义: class ...
- python基础语法_3面向对象
http://www.runoob.com/python3/python3-class.html https://www.imooc.com/learn/317 慕课网:987809563@qq.co ...
- Python基础:16面向对象概述
1:在版本2.2 中,Python社区最终统一了类型(type)和类(class),新式类具备更多高级的OOP特性,扮演了一个经典类(旧式类)超集的角色,后者是Python 诞生时所创造的类对象. 2 ...
随机推荐
- java: 类 RegisterController 是公共的, 应在名为 RegisterController.java 的文
public声明的类名需要和文件名一致,检查一下
- Java线程池 ExecutorService了解一下
本篇主要涉及到的是java.util.concurrent包中的ExecutorService.ExecutorService就是Java中对线程池的实现. 一.ExecutorService介绍 E ...
- Java后台防止客户端重复请求、提交表单
前言 在Web / App项目中,有一些请求或操作会对数据产生影响(比如新增.删除.修改),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱. 常见处理方案 1 ...
- 第48天学习打卡(HTML 行内元素和块元素 列表 表格 视频和音频 页面结构分析 iframe内联框架 表单语法 )
行内元素和块元素 块元素 无论内容多少,该元素独占一行 (p.h1-h6) 行内元素 内容撑开宽度,左右都是行内元素的可以排在一行 (a.strong.em...) 列表 什么是列表 ...
- springboot源码解析-管中窥豹系列之EnableXXX(十)
一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...
- MongoDB4.2 副本集扫盲说明
说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...
- SHELL编程概念&变量剖析
一.shell软件概念和应用场景 1) 学习Linux技术,不是为了学习系统安装.命令操作.用户权限.配置IP.网络管理,学习Linux技术重点:基于Linux系统部署和维护各种应用软件.程序(Apa ...
- 【Azure API 管理】从微信小程序访问APIM出现200的空响应的问题中发现CORS的属性[terminate-unmatched-request]功能
问题描述 使用微信小程序调用APIM(API Management)中的接口,发现POST和PUT请求被拦截,返回的状态码为200,但是无消息内容. 在小程序中的调用JS代码如: 通过浏览器测试得到的 ...
- 为什么要从 Linux 迁移到 BSD 5
为什么要从 Linux 迁移到 BSD 5 干净的分离 在 FreeBSD 的设计方式下,不同的组件组合在一起的,处理配置和调优,以及多年来开发和改进的所有工具,使得使用 FreeBSD 是一件很特别 ...
- Apache配置 8.配置防盗链
(1)介绍 防盗链,通俗讲,就是不让别人盗用你网站上的资源.这个资源,通常指的是图片.视频.歌曲.文档等. (2)配置 配置防盗链先编辑主机配置文件: #vim /usr/local/apache2. ...