Python语法基础(五)

news2025/1/9 1:37:05

🌈个人主页:羽晨同学

💫个人格言:“成为自己未来的主人~”  

首先,我们需要明白一句话,在Python中,一切都是对象

单片机,嵌入式都是面向过程的

面向对象有封装,继承,多态的特性

而面向过程需要做底层开发,面向对象是有好多东西已经封装好了,直接用就可以了

比如说:

狗吃屎,这个是面向对象的,强调吃的对象。

吃狗屎,这个是面向过程的,强调吃的过程

类和对象

我们这篇文章主要说的是任何一门语言都必不可少的,极其重要的部分---类和对象

类是一个具有特殊功能的实体的集合,抽象的一个概念。

对象是一个具体的存在。

看上面的是不是感觉有点空,接下来,让我们在代码中感受一下。

首先,我们来定义一个空类。

# 1.空类
class MyClass1():
    pass #对类的特征的描述,对类的行为的描述
class MyClass2():
    pass

这个类中pass的位置,我们应该放的是对类的特征的描述,对类的行为的描述。

所以接下来,让我们创建一个非空类

# 2.非空类
def check():
    print('check----start')
    print('check----end')

而在非空类中,我们要进行的是对类的特征的描述或者对类的行为的描述。

对类的特征的描述,代表的是变量。

对类的行为的描述,代表的是函数。

我们来看下面的这个代码。

class MyClass3():
    print('33333----start')
    # 类体
    # 0.对类的特征的描述:变量
    num=10
    name="zhangsan"

    # 1.对类的行为的描述:函数
    def show(self):
        print("showing")
    def func1(self):
        print('111111')
    print('33333---end')

需要注意的是,和函数相同的是,类中也会引入新的作用域,所以在类中定义的变量或者函数,在类外是不能直接访问的。

print(num)
print(func1)

比如说如果运行这个代码,是会报错的。报错内容如下:

NameError: name 'num' is not defined. Did you mean: 'sum'?

 另外,我们也可以采用下面的这种方式来定义类

class MyClass3:
    print('33333----start')
    # 类体
    # 0.对类的特征的描述:变量
    num=10
    name="zhangsan"

    # 1.对类的行为的描述:函数
    def show(self):
        print("showing")
    def func1(self):
        print('111111')
    print('33333---end')

上面是类的部分,接下来,我们说一下对象。

对象也被称为实例,创建对象也叫做实例化对象或者类的实例化。

语法:变量=类名()

比如说,我们来看下面的这个代码

class Person():
    pass
p1 = Person()
print(p1) # <__main__.Person object at 0x000001E6FE0B7490>
print(id(p1))
p2 = Person()
print(p2) # <__main__.Person object at 0x000001E6FE0B74D0>
print(id(p2))

在这个当中,我们就创建了两个对象。

但是在这个类中,是没有定义构造函数的。

那么,如果定义了构造函数,会是什么样子的呢?

常见的构造函数:

__init__

当有构造函数后,当我们常见对象的时候,会自动调用构造函数。 

class Animal():
    # 构造函数之一:__init__,表示初始化,给对象初始化
    # 注意:形如__xx__命名的函数,这种函数不需要手动调用,会在特殊的场景下自动调用
    # __init__:当创建对象的时候,会自动调用__init__函数
    # self:无需传参。会被自动传参,当创建对象的时候会被当前创建的对象自动传参给self,self:
    # self: 表示当前对象
    def __init__(self,name,age,kind): # self是a1和a2的地址
        # print('init--------',id(self),name,age,kind)
        # 语法:对象.变量=值,表示给当前对象进行特征的描述
        self.name = name
        self.age=age
        self.kind=kind

构造函数中的self, 代表不需要我们传参,它会自动传参,当创建对象的时候会被创建的对象自动传参给self

也就是说,self表示的是当前的对象。

a1=Animal('小白',3,'猫') # a b c 来描述对象的特征
print('a1:',id(a1))
print(a1.name,a1.kind,a1.age)
a2=Animal(4,5,6)
print('a2:',id(a2))

如果不使用构造函数呢?

比如说下面的这个代码

class Animal():
    pass
# 注意:创建对象的时候,需不需要传参,一定要和__init__函数匹配
a1=Animal()
a1.name='小白'
a1.age=3
a1.kind='猫'
print(a1.name,a1.age,a1.kind)

a2=Animal()
a2.name='bob'
a2.age=5
a2.kind='田园犬'

你看,这样相比较之下,下面的这个是不是很不方便。

类中的属性

类中的成员有变量和属性。变量我们上面说了,我们下面来说一下属性。

类中的属性一般分为两种,一种是类属性,一种是实例属性

其中的类属性直接定义在类中。

实例属性是通过对象.属性=值的方式来定义。

我们来看下面的这一段代码

class Person():
    # 类属性直接定义在类中,
    place = '地球'
    # 实例属性体现形式一、只要通过 对象.属性=值 语法定义的属性
    def __init__(self,name,age):
        self.name=name
        self.age=age

p1=Person('小明',10)
p1.hobby='跳舞'

其次,访问方式不同

类属性可以通过类名或者对象来访问

实例属性只能通过对象访问 

print(Person.place)
print(p1.place)
# 实例属性只能通过对象访问
print(p1.age)
print('*' * 50)

第三,访问优先级不同

当类属性和实例属性重名的时候,通过对象访问,优先访问的是实例属性

第四,使用场景不同

类属性是多个实例对象共有的属性,而实例属性是实例对象特有的属性。

p2=Person('xiaoming',10)
p3=Person('xiaoli',5)
print(p2.place,p3.place)

Person.place='火星'
print(p2.place,p3.place)

好了,我们这篇文章的内容就到这里,我们下次再见。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pip install causal-conv1d==1.1.1报错

Building wheels for collected packages: causal-conv1d Building wheel for causal-conv1d (setup.py) ... error error: subprocess-exited-with-error python setup.py bdist_wheel did not run successfully. │ exit code: 1 ╰─> [8 lines of output]…

Xcode15(iOS17.4)打包的项目在 iOS12 系统上启动崩溃

0x00 启动崩溃 崩溃日志&#xff0c;只有 2 行&#xff0c;看不出啥来。 0x01 默认配置 由于我开发时&#xff0c;使用的 Xcode 14.1&#xff0c;打包在另外一台电脑 Xcode 15.3 Xcode 14.1 Build Settings -> Asset Catalog Compliter - Options Xcode 15.3 Build S…

14 —— Webpack解析别名

import {checkPhone, checkCode} from ../src/utils/check.js 这么使用相对路径不安全 —— 在webpack.config.js中配置解析别名来代表src绝对路径

SystemUI 下拉框 Build 版本信息去掉

需求及场景 去掉SystemUI 下拉框 Build 版本信息 如下图所示&#xff1a;去掉 12 &#xff08;SP1A.201812.016) 了解 去掉之前我们先了解它是个什么东西:其实就是一个Build RTM 信息显示 Android_12_build_SP1A.210812.016 修改文件 /frameworks/base/packages/Syste…

基于协同推荐的黔醉酒业白酒销售系统

文末获取源码和万字论文 摘 要 基于协同推荐的黔醉酒业白酒销售系统主要针对黔醉酒业的具体业务需求所设计&#xff0c;现阶段阶段我国大型企业都会有自己的电商平台以及销售管理系统&#xff0c;其功能对于中小型过于冗长复杂&#xff0c;成本也不是中小型企业能够承受的&…

爬虫笔记24——纷玩岛自动抢票脚本笔记

纷玩岛自动抢票&#xff0c;协议抢票思路实现 一、获取Authorization凭证二、几个关键的参数三、几个关键的接口获取参数v&#xff0c;这个参数其实可以写死&#xff0c;可忽略通过价位获取演出的参数信息获取观演人信息&#xff0c;账号提前录入即可提交订单接口 先看实现图&a…

并发专题(7)之JUC并发工具源码分析

一、CountdownLatch源码分析 1.1 CountdownLatch应用 CountDownLatch本身就好像一个计数器&#xff0c;可以让一个线程或多个线程等待其他线程完成后再执行。 public static void main(String[] args) throws InterruptedException, BrokenBarrierException {// 声明CountDow…

SQL进阶技巧:如何寻找同一批用户 | 断点分组应用【最新面试题】

目录 0 问题描述 1 数据准备 2 问题分析 ​编辑 3 小结 0 问题描述 用户登录时间不超过10分钟的视为同一批用户,找出以下用户哪些属于同一批用户(SQL实现) 例如: user_name time a 2024-10-01 09:55 b 2024-10-01 09:57 c 2024-10-01…

分页查询日期格式不对

方式一:在属性上加入注解&#xff0c;对日期进行格式化 方式二:在 WebMvcConfiguration 中扩展Spring MVC的消息转换器&#xff0c;统一对日期类型进行格式化处理 /*** 统一转换处理扩展spring mvc* 后端返回前端的进行统一转化处理* param converters*/Overrideprotected voi…

redis的应用--分布式锁

redis的应用--分布式锁 一、分布式锁的概念二、分布式锁的基础实现2.1初步实现2.2引入过期时间2.3引入校验id2.4引入lua脚本2.5引入watch dog&#xff08;看门狗&#xff09;2.6引入Redlock算法 三、分布式锁的种类 一、分布式锁的概念 在⼀个分布式的系统中, 也会涉及到多个节…

构网型与跟网型混合直驱风电场并网稳定域研究

传统的风机变流器控制采用跟网型(grid-following&#xff0c;GFL)控制&#xff0c;需依赖于锁相环跟踪电网电压的频率/相位信息&#xff0c;以实现与电网的同步。随着能源电力系统的转型&#xff0c;电网逐渐转变为呈现低短路比&#xff08;short-circuitratio&#xff0c;SCR&…

异步处理优化:多线程线程池与消息队列的选择与应用

目录 一、异步处理方式引入 &#xff08;一&#xff09;异步业务识别 &#xff08;二&#xff09;明确异步处理方式 二、多线程线程池&#xff08;Thread Pool&#xff09; &#xff08;一&#xff09;工作原理 &#xff08;二&#xff09;直面优缺点和适用场景 1.需要快…

3DMAX星空图像生成器插件使用方法详解

3DMAX星空图像生成器插件&#xff0c;一键生成星空或夜空的二维图像。它可用于创建天空盒子或空间场景&#xff0c;或作为2D艺术的天空背景。 【主要特点】 -单击即可创建星空图像或夜空。 -星数、亮度、大小、形状等参数。 -支持任何图像大小&#xff08;方形&#xff09;。…

eltable el-table 横向 滚动条常显

又遇到了难受的问题&#xff0c;el-table嵌入在一个div里面&#xff0c;结果因为内容太多,横向、纵向我都得滚动查看&#xff01; 结果发现横向滚动时只能让它纵向触底后才能进行横向操作&#xff0c;这就很变态&#xff0c;明显不符合用户操作习惯。如下图&#xff1a; 要先纵…

《C++ Primer Plus》学习笔记|第8章 函数探幽 (24-11-30更新)

文章目录 8.1 内联函数8.2 引用变量8.2.1 创建引用变量8.2.2 将引用用作函数参数8.2.3 引用的属性和特别之处特点1&#xff1a;在计算过程中&#xff0c;传入的形参的值也被改变了。特点2&#xff1a;使用引用的函数参数只接受变量&#xff0c;而不接受变量与数值的运算左值引用…

在 Mac ARM 架构(例如 M1 或 M2 芯片)上安装 Node.js

文章目录 方法一&#xff1a;使用 Homebrew 安装 Node.js方法二&#xff1a;使用 Node Version Manager (NVM) 安装 Node.js方法三&#xff1a;从 Node.js 官方网站下载安装包注意事项 在 Mac ARM 架构&#xff08;例如 M1 或 M2 芯片&#xff09;上安装 Node.js 可以通过几种不…

电脑提示报错“Directx error”怎么解决?是什么原因导致的?游戏软件提示“Directx error”错误的解决方案

DirectX Error&#xff08;DX错误&#xff09;通常指的是在使用基于DirectX技术的应用程序&#xff08;尤其是游戏&#xff09;时遇到的问题。这个问题可能由多种因素导致&#xff0c;以下是一些可能的原因及相应的解决方案&#xff1a; 可能的原因 DirectX版本不匹配&#x…

JAVA:Spring Boot 3 实现 Gzip 压缩优化的技术指南

1、简述 随着 Web 应用的用户量和数据量增加&#xff0c;网络带宽和页面加载速度逐渐成为瓶颈。为了减少数据传输量&#xff0c;提高用户体验&#xff0c;我们可以使用 Gzip 压缩 HTTP 响应。本文将介绍如何在 Spring Boot 3 中实现 Gzip 压缩优化。 2、配置 Spring Boot 3 对…

哈希表,哈希桶的实现

哈希概念 顺序结构以及平衡树中&#xff0c;元素关键码与其存储位置之间没有对应的关系&#xff0c;因此在查找一个元素 时&#xff0c;必须要经过关键码的多次比较。顺序查找时间复杂度为O(N)&#xff0c;平衡树中为树的高度&#xff0c;即 O(logN)&#xff0c;搜索的效率取决…

从 EXCEL 小白到 EXCEL 高手的成长之路

在职场与日常生活中&#xff0c;Excel 作为一款强大的数据处理与分析工具&#xff0c;扮演着不可或缺的角色。无论是初学者还是资深职场人士&#xff0c;掌握 Excel 技能都能极大地提高工作效率。那么&#xff0c;从一个 Excel 小白蜕变成为 Excel 高手&#xff0c;究竟需要多久…