详解Python面向对象编程(一)
类和对象
面向过程——怎么做?
(1)把完成某一需求的所有步骤、从头到尾,逐步实现
(2)根据开发需求,将某些功能独立的代码块封装成一个又一个的函数
(3)最后完成的代码,就是顺序地调用不同的函数
面向对象——谁来做?
(1)在完成某一需求之前,首先确定职责——要做的事情(方法)
(2)根据职责确定不同的对象,在各个对象内封装不同的方法(赋予每个对象不一样的能力,从而承担不一样的职责)
(3)最后完成代码,就是顺序地让不同的对象调用不同的方法
总结:相比较函数封装,对象是更大的封装,不仅将功能独立的代码块封装成一个方法,更将多个方法封装到一个对象中
0-1、类(一张飞机的设计图纸)
是对具有相同特征和行为的一类事物的统称,是抽象的,不能直接使用的;可以看作一个模板,是负责创建对象的
特征:属性
行为:方法
0-2、对象(根据设计图纸,制造的一辆真实的飞机)
是由类创建出来的一个具体存在,是可以直接使用的;
由哪一个类创建出来的对象,就具有哪一个类的属性和方法
0-3、类和对象的关系
程序开发中,先有类,再有对象
类只有一个,而对象可以有多个;
类中定义了什么属性和方法,对象中就有什么属性和方法;
不同的对象之间属性的具体值(形参)可以是各不相同的(比如由同一张图纸创建出来的三辆飞机颜色可能各不相同)
0-4、类的设计
先确定需要哪些类;一个类需要包含以下三个元素:
(1)类名:这类事物的名字
大驼峰命名法:每一个单词的首字母大写,单词与单词之间无下划线
(2)属性:这类事物具有什么样的特征(常用名词命名)
对象具有的特征(名词),通常可以定义为属性
(3)方法:这类事物具有什么样的行为(常用动词命名)
对象具有的动作(动词),通常可以定义为方法
例子:
面向对象的基础语法
1-1、 dir()内置函数
在python中,变量、数据和函数都是对象,调到用dir()函数可以查看对象内的所有属性和方法
如:dir(demo) 会返回demo这个类的所有属性和方法
其中:方法名 格式的方法是python内置的方法/属性
1-2、定义简单的类*
在一个类中封装多个方法,这样通过这个类创建的对象就可以直接调用这些方法
(1)定义只包含方法的类
class 类名:def 方法名一(self,参数列表):passdef 方法名二(self, 参数列表):pass
(2)创建对象
对象变量 = 类名()
(3)第一个面向对象的程序
例子:小猫爱喝水,小猫爱吃鱼
分析:定义一个猫类;定义两个方法(eat、drink);按照需求,不需要定义属性
class Cat:def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫爱喝水")
# 创建猫对象(等号右边负责创建对象,等号左边负责对这个对象进行引用)
tom = Cat()
# 调用猫方法
tom.eat()
tom.drink()
# 返回tom对象是由哪一个类创建的以及这个对象在内存中的地址
print(tom)
# 返回tom对象的地址(16进制)
addr = id(tom)
# 转换为10进制
print("%d" % addr)
# 转化为16进制
print("%x" % addr)
(4)案例改造-给对象增加属性
方法:在类外部代码上直接通过 :对象名.新增属性名 = 属性值
这种方法简单,但不推荐使用,因为对象的属性和方法应当封装在类的内部,而不应该在类的外部来添加。
并且lazy_cat的并没有增加属性name,说明各个对象之间是相互独立的,对一个对象进行增加属性的操作并不会影响其他的对象。
1-3、self是什么
——在类封装的内部,self就表示当前调用方法/属性的对象自己;
self就是创建的对象本身,哪一个对象调用这个方法,self就是哪一个对象的引用
1-4、 在类的外部给对象增加属性的问题
会出现找不对该属性的问题,因此对象需要包含哪些属性,应该封装在类的内部!
初始化方法
2-1 、什么是初始化方法
当使用类名创建对象时,会自动执行以下操作:
(1)创建对象——为对象在内存中分配空间
(2)初始化方法(init)——为对象的属性设置初始值
init:内置的方法,专门用来定义一个类具有哪些属性的方法
2-2 、在初始化方法内部定义属性
(1)在__init__方法内部使用 self.属性名 = 属性的初始值 就可以定义属性
(2)定义属性之后,使用该类创建的对象,都会拥有该属性
2-3 、__str__方法
在用print输出对象变量时,能够打印自定义的内容,该方法必须返回一个字符串:
2- 4、 案例
总结:在对象的方法内部,是可以直接访问对象的属性的;
同一个类创建的各个对象之间是互不干扰的;
相关文章:

详解Python面向对象编程(一)
类和对象 面向过程——怎么做? (1)把完成某一需求的所有步骤、从头到尾,逐步实现 (2)根据开发需求,将某些功能独立的代码块封装成一个又一个的函数 (3)最后完成的代码&a…...

一文带你完整了解Go语言IO基础库
作者 | 百度小程序团队 导读 introduction 对于刚接触Golang学习的同学,估计比较难掌握的知识点之一就是文件IO处理,光在基础库里会发现 golang除了io包提供文件处理外,os包,http包,embed包都有提供类似的处理…...

Java基于微信小程序的校园请假系统
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#…...

Expert Prompting-引导LLM成为杰出专家
ExpertPrompting: Instructing Large Language Models to be Distinguished Experts 如果适当设计提示,对齐的大型语言模型(LLM)的回答质量可以显著提高。在本文中,我们提出了ExpertPrompting,以激发LLM作为杰出专家回…...

Element-Plus下拉菜单边框去除教程
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...

免费redis可视化工具windows/mac都可以使用,开源免费
官方地址:RedisInsight | The Best Redis GUI github开源地址:GitHub - RedisInsight/RedisDesktopManager Redis Desktop Manager – Redis可视化管理工具、redis图形化管理工具、redis可视化客户端、redis集群管理工具。 官方下载方式 滚动到页面底…...

PHPCMS v9城市分站插件
PHPCMS自带的有多站点功能,但是用过的朋友都知道,自带的多站点功能有很多的不方便之处,例如站点栏目没法公用,每个站点都需要创建模型、每个站点都需要单独添加内容,还有站点必须静态化。如果你内容很多这些功能当然无…...

学习几个地图组件(基于react)
去年开发时用的公司封装的地图组件,挺方便的,但是拓展性不强,所以看看有哪些优秀的开源地图组件吧 1、React Leaflet 介绍:开源的JavaScript库,用于在web上制作交互式地图,允许你使用React组件的方式在应…...

【测试开发学习历程】计算机编程语言
前言: 学习完数据库,我们便要进入到编程语言的内容当中了。 这里先对编程语言写出大致的分类, 在这之后,我们会以Python为重点, 开始测试开发为重点的编程语言学习。 目录 1 计算机编程语言的发展 2 语言的分类…...

动态内存管理-传值调用错题解析
首先我们来看这个错误代码 首先我们看代码逻辑,首先main函数调用test,test接收的是void类型,设置一个指针变量,指向null,传递给get函数,也就是传递一个空指针给getmemory函数,这个函数接收了&a…...

Java特性之设计模式【装饰器模式】
一、装饰器模式 概述 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装 装饰器模式通过将对象包装在装饰器类中,以…...

Leetcode算法题笔记(2)
目录 图论51. 岛屿数量解法一 52. 腐烂的橘子解法一 53. 课程表解法一 54. 实现 Trie (前缀树)解法一 回溯55. 全排列解法一 56. 子集解法一解法二 57. 电话号码的字母组合解法一 58. 组合总和解法一解法二 59. 括号生成解法一解法二 60. 单词搜索解法一 61. 分割回文串解法一 …...

二手车交易网站|基于JSP技术+ Mysql+Java+ B/S结构的二手车交易网站设计与实现(可运行源码+数据库+设计文档)
推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…...

lora-scripts 训练IP形象
CodeWithGPU | 能复现才是好算法CodeWithGPU | GitHub AI算法复现社区,能复现才是好算法https://www.codewithgpu.com/i/Akegarasu/lora-scripts/lora-trainstable-diffusion打造自己的lora模型(使用lora-scripts)-CSDN博客文章浏览阅读1.1k次…...
Acwing 503. 借教室
Problem: 503. 借教室 文章目录 思路解题方法复杂度Code 思路 这是一个二分查找问题。我们需要找到最大的借教室数量,使得每个教室的借用时间不超过其可用时间。我们可以通过二分查找来找到这个最大的借教室数量。 解题方法 我们首先对所有的借教室请求按照结束时间…...

吴恩达深度学习笔记:浅层神经网络(Shallow neural networks)3.1-3.5
目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第三周:浅层神经网络(Shallow neural networks)3.1 神经网络概述(Neural Network Overview)3.2 神经网络的表示(Neural Network Representation…...

Linux设备驱动开发 - 三色LED呼吸灯分析
By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 目录 展锐UIS7885呼吸灯介绍呼吸灯调试方法亮蓝灯亮红灯亮绿灯展锐UIS7885呼吸灯DTS配置ump9620 PMIC驱动ump9620中的LED呼吸灯驱动LED的tr…...

开发者的瑞士军刀:DevToys
DevToys: 一站式开发者工具箱,打造高效创意编程体验,让代码生活更加得心应手!—— 精选真开源,释放新价值。 概览 不知道大家是否在windows系统中使用过PowerToys?这是微软研发的一项免费实用的系统工具套…...

【vue3.0】实现导出的PDF文件内容是红头文件格式
效果图: 编写文件里面的主要内容 <main><div id"report-box"><p>线索描述</p><p class"label"><span>线索发现时间:</span> <span>{{ detailInfoVal?.problem.createdDate }}</span></p><…...
【CSP试题回顾】202012-2-期末预测之最佳阈值(优化)
CSP-202012-2-期末预测之最佳阈值 关键点 1.map的遍历方式 map<int, int>occ0Num, occ1Num; for (auto it thetaSet.begin(); it ! thetaSet.end(); it) {num num occ0Num[*it] - occ1Num[*it];auto nextIt next(it); // 获取下一个迭代器if (num > maxNum &a…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Unit 1 深度强化学习简介
Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...