【python基础学习10课_面向对象、封装、继承、多态】

一、类与对象

1、类的定义

在类的里面,称之为方法。
在类的外面,称之为函数。


类:人类,一个族群,是一个群体

类的语法规则:

class 自定义的类名():
    属性 -- 变量
    方法 -- 函数

类,首字母大写,拼接的英文不需要隔开,但是每个单词的首字母都需要大写
方法/函数,首字母小写,拼接的英文需要用下划线隔开
1)类里面定义的变量、方法,不能在类的外面引用

 2)通过实例化对象,来调用类里面的变量和函数
类名A +() 表示实例化一个对象,对象要有个定义的名字B

所以  对象B = 类名A ()  表示,对A类,示例化了一个个体对象B。

也就是对 人类,实例化了一个 对象 叫小王。小王具有人类的属性特征

对学生群体类,实例化了 一个对象,叫大学生,大学生具有学生群体类的属性和特征

实例化  就是  初始化

 

3)同一个类的对象,都是一样的基本属性
4)通过变量的重定义,来进行对象属性的修改

初始化的时候,不同的对象,属性一致。但是对象有了属性的重定义后,重定义的属性是该对象自己自定义的属性。手机刚出厂,基本设置一样,但是后面每个人都对自己的手机进行自定义,手机就不一样了,但也都是在基本属性之上的改变。

 

对象中的属性和方法都是没有相互影响的,对C对象的属性重定义,不影响B对象的

2、类的应用

1)构造方法
1、在Python中,构造方法(也称为初始化方法)是一个特殊的方法,用于在创建类的实例时初始化该实例。构造方法的语法规则如下:

构造方法的名称必须是 _ _init_ _  (前后都是双下划线,表示这是一个特殊方法)正常显示会连上,看起来是:__init__

构造方法至少需要有一个参数,通常是 self,它指向新创建的实例本身。

self 参数必须是构造方法的第一个参数。

构造方法可以有任何数量的其他参数,这些参数在创建实例时提供,用于初始化实例的属性。


2、举例:
class MyClass:
    def __init__(self, value1, value2):
        self.attribute1 = value1 
        self.attribute2 = value2

# 创建 MyClass 的一个实例,传递两个参数给构造方法
my_instance = MyClass(10, 20)


3、解析上面的例子:
class: 定义类的关键字。
MyClass: 类的名称,可以是任何有效的Python标识符。
__init__: 构造方法的名称,双下划线表示这是一个特殊方法。
self: 指向类实例的引用,在类的方法中始终作为第一个参数传递。
value1, value2: 构造方法的参数,用于接收传递给实例化时的值。
self.attribute1, self.attribute2: 实例属性,使用 self 关键字来设置实例的属性。
在创建类的实例时,Python会自动调用构造方法。构造方法的目的是为了能够定制每个实例的创建过程,为其提供初始状态。



self表示当前对象,传入进来的属性,需要赋值给当前对象的属性
 
self表示当前对象,给这个对象传入进来的属性,需要赋值给当前对象的属性

2)构造方法的应用

3、类中的属性

1)类属性的定义
实例属性:实例化的对象的属性
    定义在构造方法中的属性
        公有实例属性:常规属性
        私有实例属性:双下划线开头,只能够在自己的类中进行调用

        私有属性,是防止被随意的乱改





语法规则:
对象名称.属性名称


类的内部使用:
self.属性名称--self表示当前对象
 2)调用公共属性

属性错误:'Person'对象没有属性'self'

正确,不带self

 3)调用私有属性
3.1)在类的外面直接调用--报错

属性错误:'Person'对象没有属性'__sex'

3.2)在类的外面,通过类的方法执行在类的里面的私有属性--可以调用

在类的里面,是不区分公有和私有的属性,在类的方法里面可以直接操作类的所有属性

 

3.3)私有属性在类的外面被重定义,就不再是私有的了

重定义的属性就是该对象自己自定义的属性,属于该对象,重定义后的属性不再是原先的属性

 4、类中的方法

1)类方法的定义
方法与函数的主要区别:

1)关联:方法与特定的类实例相关联,而函数是独立的。
2)调用方式:方法通常通过对象调用,如 object.method(),而函数直接通过其名称调用,如 function()。
3)参数:方法至少有一个参数 self,它是对当前对象的引用,而函数没有这样的隐含参数。
4)作用域:方法可以访问其所属对象的属性和其他方法,而函数只能访问全局作用域和其参数中传递的值。

类里面的叫方法,类外面的叫函数。

2)调用公共方法

2)调用私有方法

私有方法不能直接调用

通过调用公共方法来调用私有方法

5、类的封装

1)封装的定义
封装:
1、设置一个方法,可以进行对私有属性的传值
2、可以把私有属性返回,让在类的外面可以操作私有属性

set和get:可以通过定义方法来访问和修改类的属性,从而提供对属性访问的更细粒度的控制。
 2)封装的实践

6、类的继承

继承:节约代码的维护量,在原有的基础上面进行迭代维护

语法规则:
class 自定义类名(父类):
    子类独有的代码块

在实例化之后,可以调用子类的方法和属性,也可以调用父类的方法和属性
 1)单继承

 1.1)想使用父类的私有属性,就得对父类进行封装。

 1.2)想使用父类的私有方法,就得在父类里增加一个调用私有方法的公共方法。

 

2)继承的传递性

子类的子类,可以调用父类的属性和方法

3)方法的重构
方法的重构,只运行自己的,不运行父级的方法

 

 4)多继承
"""
语法规则:
class 自定义类名(父类1, 父类2):
    其余的内容和之前的没什么区别
"""

4.1)两个父类,都有同名的方法--方法的重构

执行:子类(近父类,远父类)的近的父类的方法

4.2)两个父类和自己,都有同名的方法--方法的重构

自己有的重构的方法,就只执行自己的。如果自己没有这个重构的方法,谁离的近就执行谁的。

7、多态 


多态:定一个规则,按照这个规则向接口提供对应的不同的对象。然后根据提供的不同对象,去执行不同对象中的方法


传对象,调用对象里面的属性和方法

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/434564.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软考-中级-系统集成2023年综合知识(五)

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 软考中级专栏回顾 专栏…

阿里云服务器配置选择哪个比较好?看花眼了

阿里云服务器配置怎么选择?CPU内存、公网带宽和系统盘怎么选择?个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例,企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器,阿里云服务器网aliyunfuwuqi.com整…

Java常用笔试题,面试java对未来的规划

最重要的话 2021年,真希望行业能春暖花开。 去年由于疫情的影响,无数行业都受到了影响,互联网寒冬下,许多程序员被裁,大环境格外困难。 我被公司裁掉后,便着急地开始找工作,一次次地碰壁&#…

微信jsSDK前端签名错误,巨坑; 前后端分离的一大失误。

微信 JS 接口签名校验工具 1. 确保你后端生成的签名是正确,这个是第一步。否则后面都是白扯。 以用上面微信自带的验证签名工龄进行验证。 确保生成的签名和你的签名是一致的。 2. timestamp需要是字符串类型. 3. 切记,URL不要encode,如果…

9.12零钱兑换(LC518-M)(开始完全背包,与01背包的不同仅在于遍历顺序)

算法: 这是一道典型的背包问题,一看到钱币数量不限,就知道这是一个完全背包。 但本题和纯完全背包不一样,纯完全背包是凑成背包最大价值是多少,而本题是要求凑成总金额的物品组合个数! 动规五步曲&#…

剑指offer--c++--n个骰子的点数

目录 题目: 题目分析: 最后编写代码: 输出结果 题目: 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。 感谢大佬的帮助:https://www.cnblogs.c…

人人都写过的6个bug

大家好&#xff0c;我是知微。 程序员写bug几乎是家常便饭&#xff0c;也是我们每个人成长过程中难以避免的一部分。 为了缓解这份“尴尬”&#xff0c;今天想和大家分享一些曾经都会遇到过的bug&#xff0c;让我们一起来看看这些“经典之作”。 1、数组越界 #include <…

数据库-DDL

show databases; 查询所有数据库 select database(); 查询当前数据库 use 数据库名&#xff1b; 使用数据库 creat database[if not exists] 数据库名…

成都源聚达:开抖音店铺分数需要达到多少

在数字化浪潮中&#xff0c;抖音以其独特的平台魅力吸引了无数商家入驻。但想要开设一家抖音店铺并非随意之举&#xff0c;它需要商家达到一定的评分标准。这如同参加一场考试&#xff0c;只有成绩合格者才有资格入座。那么&#xff0c;这个分数线究竟是多少呢? 据官方数据显示…

力扣hot100:560.和为K的子数组(前缀和+哈希表)

分析&#xff1a; 这个题目乍一看&#xff0c;数据大小用暴力解法大概率会超时&#xff0c;可能想用双指针&#xff0c;但是问题出现在 可能存在负数&#xff0c;也就是说即使是找到了一个答案&#xff0c;后面也可能存在负数和正数抵消&#xff0c;又是答案&#xff0c;因此不…

【Linux】文件传输工具lrzsz的安装与使用

目录 一、关于lrzsz 二、安装lrzsz 三、lrzsz的说明及使用 1、上传命令rz 2、下载命令sz 一、关于lrzsz 在开发的过程中&#xff0c;经常遇到 需要在 Linux 和 Windows 之间上传下载文件的情况 这时&#xff0c;一般都是使用 FTP 或者 WinSCP 工具进行上传下载, 虽然也能…

用ChatGPT计算植被归一化指数NDVI并出图的详细教程

用ChatGPT结合GIS计算植被归一化指数NDVI出图教程 用ENVI计算比较繁琐&#xff0c;如今AI的盛行&#xff0c;我们可以轻松解决计算问题&#xff0c;只需1一分钟变可以出图。 详细教学请看上方视频步骤。 更多ChatGPT教学内容请见&#xff1a;ChatGPT结合GIS&#xff1a;一分钟…

深度学习_18_模型的下载与读取

在深度学习的过程中&#xff0c;需要将训练好的模型运用到我们要使用的另一个程序中&#xff0c;这就需要模型的下载与转移操作 代码&#xff1a; import math import torch from torch import nn from d2l import torch as d2l import matplotlib.pyplot as plt# 生成随机的…

服务器为什么会卡顿,出现卡顿情况怎么办

从维护服务器的角度来看&#xff0c;服务器卡顿是一种常见的问题&#xff0c;但服务器卡顿可能会影响到网站、游戏或平台的正常访问和运行&#xff0c;所以出现卡顿问题首先需要对服务器进行全面的检查&#xff0c;确定卡顿原因&#xff0c;然后选取适合的解决方案&#xff0c;…

基于Spring Boot的秒杀系统(附项目源码+论文)

摘要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本次开发一套基于Spring Boot的秒杀系统&am…

网络编程作业day6

数据库操作的增、删、改完成 #include <myhead.h>//查询的回调函数 int callback(void* data,int count,char** argv, char** columnName) {//count是字段数//argv是字段内容//columnName是字段名称for(int i0;i<count;i) {printf("%s%s\n", columnName[…

智能驾驶规划控制理论学习06-基于优化的规划方法

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法&#xff08;Le…

通过hyperbeam创建梁单元截面属性

1、为模型中标准的圆柱形创建梁单元和赋予属性&#xff1b; 2、为模型中不标准的对称性实体创建梁单元和赋予属性&#xff1b; 3、为模型中壳体部分创建梁单元和赋予属性&#xff1b;

上位机图像处理和嵌入式模块部署(qmacvisual三个特色)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 了解了qmacvisual的配置之后&#xff0c;正常来说&#xff0c;我们需要了解下不同插件的功能是什么。不过我们不用着急&#xff0c;可以继续学习下…

分布式事务(SeataClient)

问题场景 元数据 库存 100订单记录为空下单操作 @AutowiredRestTemplate restTemplate;/*** 下单** @return*/@Transactional // 开启事务 异常后触发数据库回滚操作@Overridepublic Order create(Order order) {// 插入订单orderMapper.insert(order);// 扣减库存 MultiValu…