python基础day04

news2025/6/6 20:38:42

1.两大编程思想的异同点:

面向过程面向对象
区别事物比较简单,可以用线性的思维去解决事物比较复杂,使用简单的线性思维无法解决
共同点面向过程和面向对象都是解决实际问题的一种思维方式
二者相辅相成,并不是对立的解决复杂问题,通过面向对象方式便于我们从宏观上把握事物之间复杂的关系,方便我们分析整个系统,具体到微观操作,仍然使用面向过程方式来处理

2.类:

  • 定义:是由N多个对象抽取出“像"的属性和行为从而归纳总结出来的一种类别。
  • 创建类的语法结构:(注:类名首字母要大写)

         class 类名():                          或                               class 类名:

               pass                                                                            pass

  • 创建对象的语法格式:

         对象名=类名()

  • 类的组成:

        (1)类属性:直接定义在类中,方法外的变量

        (2)实例属性:定义在__init__方法中,使用self打点的变量

        (3)实例方法:定义在类中的函数,而且自带参数self

        (4)静态方法:使用装饰器@staticmethod修饰的方法

        (5)类方法:使用装饰器@classmethod修饰的方法

class Student:
    school="北京外国语学校"            # 类属性

    # 初始方法
    def __init__(self,xm,age):
        self.name=xm                # 实例属性
        self.age=age                # 实例属性

    # 实例方法
    def show(self):
        print(f"我叫{self.name},今年{self.age}岁了")

    # 静态方法
    @staticmethod
    def sm():
        print("静态方法不能调用实例属性和实例方法")

    # 类方法
    @classmethod
    def cm(cls):
        print("类方法不能调用实例属性和实例方法")

# 创建类的对象
stu=Student("杨娜娜",18)
print(Student.school)                     # 北京外国语学校 
print(stu.name,stu.age)                   # 杨娜娜 18
stu.show()                                # 我叫杨娜娜,今年18岁了
Student.sm()                              # 静态方法不能调用实例属性和实例方法
Student.cm()                              # 类方法不能调用实例属性和实例方法
  • 注意 :

       实例属性和实例方法是对象名打.调用。

       类属性,类方法,静态方法是类名打.调用。

       静态方法和类方法不能调用实例属性和实例方法。

  • 动态绑定属性和方法:

       对象名.属性名=属性值

       对象名.实例方法=方法名

stu.gender="男"
def introduce():
    print("动态绑定的实例方法")
stu.fun=introduce

3.面向对象的三大特征:

  • 封装:隐藏内部细节,对外提供操作方式。
  • 继承:是在函数调用时,使用“形参名称=值”的方式进行传参,传递参数顺序可以与定义时参数的顺序不同。
  • 多态:是在函数定义时,直接对形式参数进行赋值,在调用时如果该参数不传值,将使用默认值如果该参数传值,则使用传递的值。

4.类的权限控制:

  • 权限控制:是通过对属性或方法添加单下划线、双下划线以及首尾双下划线来实现。
  • 单下划线开头:以单下划线开头的属性或方法表示protected受保护的成员,这类成员被视为仅供内部使用,允许类本身和子类进行访问,但实际上它可以被外部代码访问。
  • 双下划线开头:表示private私有的成员,这类成员只允许定义该属性或方法的类本身进行访问。
  • 首尾双下划线:一般表示特殊的方法。
class Student:
    def __init__(self,name,age,gender):
        self._name=name        # self._name是受保护的,只能本类和子类访问
        self.__age=age         # self.__age表示私有的,只能类本身去访问
        self.gender=gender     # 普通的实例属性,类的内部,外部以及子类都可以访问

    def _fun1(self):           # 受保护的
        print("子类及本身可以访问")

    def __fun2(self):          # 私有的
        print("只有定义的类可以访问")

    def show(self):            # 普通的实例方法
        self._fun1()           # 类本身访问受保护的方法
        self.__fun2()          # 类本身访问私有方法
        print(self._name)      # 受保护的实例属性
        print(self.__age)      # 私有的实例属性

stu=Student("张三",18,"女")
print(stu._name)
# print(stu.__age)            # 不能访问
stu._fun1()                   # 子类及本身可以访问
# stu.__fun2()                # 不能访问

# 访问私有属性和私有方法
print(stu._Student__age)      # 18
stu._Student__fun2()          # 只有定义的类可以访问

5.类中属性的设置:

  • 使用@property修改方法,将方法转成属性使用
  • 使用@gender.setter设置成可写属性
class Student:
    def __init__(self,name,gender):
        self.name = name
        self.__gender = gender

    # 使用@property修改方法,将方法转成属性使用
    @property
    def gender(self):
        return self.__gender

    # 将gender设置成可写属性
    @gender.setter
    def gender(self,value):
        self.__gender = value

stu=Student("张三","男")
print(f"{stu.name}的性别是{stu.gender}")      # 张三的性别是男
stu.gender="女"
print(f"{stu.name}的性别是{stu.gender}")      # 张三的性别是女

6.类的继承:

  • 继承:在Python中一个子类可以继承N多个父类,一个父类也可以拥有N多个子类,如果一个类没有继承任何类,那么这个类默认继承的是object类。
  • 语法结构:

        class 类名(父类1,父类2....父类N):

                   pass  

# 父类
class Person:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def show(self):
        print(f"姓名:{self.name},年龄:{self.age}")

# 子类1
class Student(Person):
    def __init__(self,name,age,stuno):
        super().__init__(name,age)
        self.stuno = stuno

# 子类2
class Doctor(Person):
    def __init__(self,name,age,department):
        super().__init__(name,age)
        self.department = department

stu=Student("张三",19,"1001")
stu.show()                                      # 姓名:张三,年龄:19 
doc=Doctor("李四",20,"外科")
doc.show()                                      # 姓名:李四,年龄:20

7.类的多继承:

class FatherA:
    def __init__(self,name):
        self.name = name
    def showA(self):
        print("父类A中的方法")

class FatherB:
    def __init__(self,age):
        self.age = age
    def showB(self):
        print("父类B中的方法")

class Son(FatherA,FatherB):
    def __init__(self,name,age,gender):
        FatherA.__init__(self,name)
        FatherB.__init__(self,age)
        self.gender = gender

son=Son("张三",19,"女")
son.showA()
son.showB()

8.类中方法重写:

  • 子类继承了父类就拥有了父类中公有成员和受保护的成员。
  • 父类的方法法并不能完全适合子类的需要求这个时候子类就可以重写父类的方法。
  • 子类在重新父类的方法时,要求方法的名称必须与父类方法的名称相同,在子类重写后的方法中可以通过super().xxx()调用父类中的方法。
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def show(self):
        print(f"我是{self.name},今年{self.age}岁了")

class Doctor(Person):
    def __init__(self, name, age,department):
        super().__init__(name, age)
        self.department = department
    def show(self):
        super().show()
        print(f"我的科室是{self.department}")
        
doc=Doctor("张三",20,"外科")       # 创建对象时会自动调用__init__方法
doc.show()

9.object类:

  • object:所有类直接或间接的父类;所有类都拥有object类的属性和方法。
  • object类中特殊方法:
object类中特殊的方法功能描述
__new__()由系统调用,用于创建对象
__init__()创建对象时手动调用,用于初始化对象属性值
__str__()对象的描述,返回值是str类型,默认输出对象的内存地址。
  • 特殊方法:
运算符特殊方法功能描述
+__add__()执行加法运算
-__sub__()执行减法运算
く,<=,==__It__(),__le__(),__eq__()执行比较运算
>,>=,!=

__gt__(),__ge__(),__ne__()

执行比较运算
*,/__mul__(),__truediv__()执行乘法运算,非整除运算
%, //__mod__(),__floordiv__()执行取余运算,整除运算
**__pow__()执行取余运算,整除运算
a=10
b=20
print(a+b)               # 30
print(a.__add__(b))      # 30
  • 特殊属性:
特殊属性功能描述
obj.__dict__对象的属性字典
obj.__class__对象所属的类
class.__bases__类的父类元组
class.__base__类的父类,如果继承了N多个父类,只显示第一个父类
class.__mro__类的层次结构
class.__subclasses__()类的子类列表
class A:
    pass
class B:
    pass
class C(A, B):
    def __init__(self, name, age):
        self.name = name
        self.age = age
a=A()
b=B()
c=C("张三",20)
print("对象a的属性字典:",a.__dict__)       # {}
print("对象b的属性字典:",b.__dict__)       # {}
print("对象c的属性字典:",c.__dict__)       # {'name': '张三', 'age': 20}

print("对象a所属的类:",a.__class__)        # <class '__main__.A'>
print("对象b所属的类:",b.__class__)        # <class '__main__.B'>
print("对象c所属的类:",c.__class__)        # <class '__main__.C'>

10.类的深拷贝与浅拷贝:

  • 变量的赋值:只是形成两个变量,实际上还是指向同一个对象
  • 浅拷贝:拷贝时,对象包含的子对象内容不拷贝,因此源对象与拷贝对象会引用同一个子对象。(源对象和拷贝对象的内存地址不一样,子对象的内存地址一样)
  • 深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同。(源对象和拷贝对象的内存地址不一样,子对象的内存地址也不一样)
class CPU:
    pass
class Disk:
    pass
class Computer:
    def __init__(self, cpu, disk):
        self.cpu = cpu
        self.disk = disk
cpu = CPU()
disk = Disk()
com=Computer(cpu, disk)
# 变量赋值
com1=com
print(com,com.cpu,com.disk)      # <__main__.Computer object at 0x0000027CC583CAD0> <__main__.CPU object at 0x0000027CC579A5D0> <__main__.Disk object at 0x0000027CC5846FD0>
print(com1,com1.cpu,com1.disk)   # <__main__.Computer object at 0x0000027CC583CAD0> <__main__.CPU object at 0x0000027CC579A5D0> <__main__.Disk object at 0x0000027CC5846FD0>

import copy
# 浅拷贝
com2=copy.copy(com)
print(com2,com2.cpu,com2.disk)   # <__main__.Computer object at 0x0000024AE875D5D0> <__main__.CPU object at 0x0000024AE8766FD0> <__main__.Disk object at 0x0000024AE875CAD0>

# 深拷贝
com3=copy.deepcopy(com)
print(com3,com3.cpu,com3.disk)   # <__main__.Computer object at 0x0000029EF31C5290> <__main__.CPU object at 0x0000029EF34CD450> <__main__.Disk object at 0x0000029EF34CDD90>

11.模块:

  • 简介:

       (1)在Python中一个后缀名为.py的Python文件就是一个模块。

       (2)模块中可以定义函数、类等。

       (3)模块也可以避免函数、类、变量等名称相冲突的问题。

       (4)模块不仅提高了代码的可维护性,同时还提高了代码的可重用性。

       (5)在给模块命名的时候要求全部使用小写字母,多个单词之间使用下划线进行分隔。

       (6)如果自定义模块名称与系统内置模块名称相同,那么在导入时会优先导入自定义的模块。

  • 模块的分类:

       (1)系统内置模块:由开发人员编写好的模块,在安装Python解释器时一同安装成计算机。

       (2)自定义模块:一个以.py结尾的文件就是一个模块,新建Python文件,实际上就是在新建模块。

       自定义模块的作用:一是规范代码,将功能相同的函数、类等封装到一个模块中,让代码更易于阅读;另外一个目的与系统内置模块相同,即可以被其它模块调用,提高开发的效率。

  • 模块的导入:

      方式一 : import 模块名称 [as 别名]

      方式二 : from 模块名称 import 变量/函数/类/*

# 方式一:
import my_info as info
print(info.name)
info.introduce()

# 方式二:
# from my_info import name,introduce
from my_info import *
print(name)
introduce()

12.Python中的包:

  • 简介:含有_init_.py文件的文件夹(目录),可以避免模块名称相冲突的问题。
  • 包的导入:

       方式一 : import 包名.模块名

       方式二 : from 包名 import 模块名

       方式三 : from 包名.模块名 import 函数/变量等

# 方式一:import 包名.模块名
import admin.my_admin as admin     
admin.info()

# 方式二: from 包名 import 模块名
from admin import my_admin as my   
my.info()

# 方式三: from 包名.模块名 import 函数/变量等
# from admin.my_admin import info
from admin.my_admin import *
info()
  • 主程序运行:

        if __name__ == '__main__':

             pass

13.Python中常用的内置模块:

     在安装Python解释器时与解释器一起安装进来的模块被称为系统内置模块,也被称为标准模块或标准库。

标准库名称功能描述
os模块与操作系统和文件相关操作有关的模块
re模块用于在Python的字符串中执行正则表达式的模块
random模块用于产生随机数的模块
json模块用于对高维数据进行编码和解码的模块
time模块与时间相关的模块
datetime模块与日期时间相关的模块,可以方便的显示日期并对日期进行运算

14.random模块:

      random模块是Python中用于产生随机数的标准库。

函数名称功能描述
seed(x)初始化给定的随机数种子,默认为当前系统时间
random()产生一个[0.0,1.0)之间的随机小数
randint(a,b)生成一个[a,b]之间的整数
randrange(m,n,k)生成一个[m,n)之间步长为k的随机整数
uniform(a,b)生成一个[a,b]之间的随机小数
choice(seq)从序列中随机选择一个元素
shuffle(seg)将序列seq中元素随机排列,返回打乱后的序列

15.time模块:

     time模块是Python中提供的用于处理时间的标准库,可以用来进行时间处理、时间格式化和计时等。

函数名称功能描述
time()获取当前时间戳
localtime(sec)获取指定时间戳对应的本地时间的struct time对象
ctime()获取当前时间戳对应的易读字符串
strftime()格式化时间,结果为字符串
strptime()提取字符串的时间,结果为struct time对象
sleep(sec)休眠sec秒
格式化字符串
格式化字符串日期/时间取值范围
%Y年份0001~9999
%m月份01~12
%B月名January~December
%d日期01~31
%A星期Monday~Sunday
%H小时(24h制)小时(24h制)
%I小时(12h制)01~12
%M分钟00~59
%S00~59

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

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

相关文章

嵌入式学习--江协stm32day1

失踪人口回归了&#xff0c;stm32的学习比起51要慢一些&#xff0c;因为涉及插线&#xff0c;可能存在漏插&#xff0c;不牢固等问题。 相对于51直接对寄存器的设置&#xff0c;stm32因为是32位修改起来比较麻烦&#xff0c;江协课程是基于标准库的&#xff0c;是对封装函数进…

湖北理元理律师事务所:债务化解中的心理重建与法律护航

专业法律顾问视角 一、债务危机的双重属性&#xff1a;法律问题与心理困境 在对173名债务人的调研中发现&#xff1a; 68%存在焦虑引发的决策障碍&#xff08;如不敢接听银行电话&#xff09; 42%因羞耻感隐瞒债务导致雪球效应 湖北理元理律师事务所创新采用法律-心理双轨…

【更新中】(文档+代码)基于推荐算法和Springboot+Vue的购物商城

概要设计 本节规划和定义了Woodnet桌游电商平台的软件概要设计说明书&#xff0c;描述了软件的总体设计、接口设计、运行设计、系统数据库结构设计以及系统出错处理设计&#xff0c;从整体上说明了系统设计的结构层次、处理流程、系统用例等。 本系统是一个独立的系统&#x…

六种高阶微分方程的特解(原创:daode3056)

高阶微分方程的通解是指包含所有可能解的解的表达式。对于一个 n 阶微分方程&#xff0c;其通解通常包含 n 个任意常数。这些任意常数可以通过初始条件或边界条件来确定。高阶微分方程的特解是指在通解中&#xff0c;特定地选择了一组常数&#xff0c;使得解满足给定的初始条件…

【C++11(上)】—— 我与C++的不解之缘(三十)

一、C11 这里简单了解一下C发展好吧&#xff1a; C11是C的第二个大版本&#xff0c;也是自C98以来最重要的一个版本。 它引入了大量的更改&#xff0c;它曾被人们称为C0x&#xff0c;因为它被期待在2010年之前发布&#xff1b;但在2011年8月12日才被采纳。 C03到C11花了8年时间…

【多线程初阶】wait() notify()

文章目录 协调多个线程间的执行顺序join 和 wait 区别sleep 和 wait 区别 wait()方法线程饿死调用 wait()唤醒 wait() notify()方法wait() 和 notify() 需对同一对象使用确保先 wait ,后 notify多个线程在同一对象上wait notify随机唤醒一个wait notifyAll()方法应用 wait() 和…

安全-JAVA开发-第二天

Web资源访问的流程 由此可见 客户访问JAVA开发的应用时 会先通过 监听器&#xff08;Listener&#xff09;和 过滤器&#xff08;Filter&#xff09; 今天简单的了解下这两个模块的开发过程 监听器&#xff08;Listener&#xff09; 主要是监听 我们触发了什么行为 并进行反应…

Python基础:文件简单操作

&#x1f343;引言 手把手带你快速上手Python Python基础专栏 一、&#x1f343;文件是什么 变量是把数据保存到内存中. 如果程序重启/主机重启, 内存中的数据就会丢失。 要想能让数据被持久化存储, 就可以把数据存储到硬盘中. 也就是在文件中保存。 通过文件的后缀名, 可以看…

深度学习项目之RT-DETR训练自己数据集

RT-DETR 1.模型介绍&#x1f4cc; 什么是 RT-DETR &#xff1f;&#x1f4d6; 核心改进点&#x1f4ca; 结构示意&#x1f3af; RT-DETR 优势⚠️ RT-DETR 缺点&#x1f4c8; 应用场景&#x1f4d1; 论文 & 官方仓库2.模型框架3.Yaml配置文件4.训练脚本5.训练完成截图6.总结…

以太网帧结构和封装【二】-- IP头部信息

1字节 byte 8比特 bit 【位和比特是同一个概念】 比特/位&#xff0c;字节之间的关系是&#xff1a; 位&#xff08;Bit&#xff09; 中文名&#xff1a;位&#xff08;二进制位&#xff09;。 英文名&#xff1a;Bit&#xff08;Binary Digit 的缩写&#xff09;。 含义&…

Promtail采集服务器本地日志存储到Loki

✅ 一、前提条件 已安装 Loki 服务 日志文件目录可访问&#xff08;如 /var/log&#xff09; 具备 sudo 权限 &#x1f9e9; 二、下载 Promtail 二进制文件 # 替换为你想要的版本 VERSION"3.5.1"# 创建目录 sudo mkdir -p /opt/promtail cd /opt/promtail# 下载并…

学习STC51单片机27(芯片为STC89C52RCRC)

每日一言 你读过的书、走过的路、流过的汗&#xff0c;终将成就独一无二的你。 硬件&#xff1a;LCD1602液晶显示 非标协议外设 概述 LCD1602&#xff08;Liquid Crystal Display&#xff09;是一种工业字符型液晶&#xff0c;能够同时显示 1602 即 32 字符(16列两行) 那我…

DA14531_beacon_大小信标设备开发

蓝牙信标是一款通过广播指定蓝牙信号&#xff0c;实现信标信号扫描、识别和获得辅助信息的电子产品。 不同品名的蓝牙信标采用相同的 UUID 和广播信号格式&#xff0c;但在 MAC 地址、工作寿命、体积和广播周期上有所差异。 小武编程巧用DA14531开发一款蓝牙信标.

【算法训练营Day06】哈希表part2

文章目录 四数相加赎金信三数之和四数之和 四数相加 题目链接&#xff1a;454. 四数相加 II 这个题注意它只需要给出次数&#xff0c;而不是元组。所以我们可以分治。将前两个数组的加和情况使用map存储起来&#xff0c;再将后两个数组的加和情况使用map存储起来&#xff0c;ke…

Word双栏英文论文排版攻略

word写双栏英文论文的注意事项 排版首先改字体添加连字符还没完呢有时候设置了两端对齐会出现这样的情况&#xff1a; 公式文献 等我下学期有时间了&#xff0c;一定要学习Latex啊&#xff0c;word写英文论文&#xff0c;不论是排版还是公式都很麻烦的&#xff0c;而Latex一键就…

乡村三维建模 | 江苏农田无人机建模案例

测绘是农田建设的基础工作&#xff0c;测绘的质量和效率直接影响农田建设的进度和成果。传统的人工测量、地面测量等测绘手段&#xff0c;存在效率低、精度差、受环境影响大、成本高等缺点&#xff0c;难以满足高标准农田建设的要求。而无人机倾斜摄影技术具有高效、精确、灵活…

2025 5 月 学习笔记

计算高斯半径&#xff0c;用于生成高斯热图 这个的意义是什么 有什么作用&#xff1f; 14 核心意义&#xff1a;平衡定位精度与检测鲁棒性 在基于热图的目标检测方法&#xff08;如CenterNet、CornerNet等&#xff09;中&#xff0c;计算高斯半径的核心意义在于​​在精确…

SpringBoot(七) --- Redis基础

目录 前言 一、Redis入门 二、Redis常用数据类型 三、Redis常用命令 1. 字符串操作命令 2. 哈希操作命令 3. 列表操作命令 4. 集合操作命令 5. 有序集合操作命令 6.通用命令 四、在Java中操作Redis 前言 Redis是一个基于内存的key-value结构数据库&#xff0c;有以下…

从OSI到TCP/IP:网络协议的演变与作用

个人主页&#xff1a;chian-ocean 文章专栏-NET 从OSI到TCP/IP&#xff1a;网络协议的演变与作用 个人主页&#xff1a;chian-ocean文章专栏-NET 前言网络发展LANWAN 协议举个例子&#xff1a; 协议的产生背景 协议的标准化OSI模型参考OSI各个分层的作用各层次的功能简介 TCP/…

Stream流性能分析及优雅使用

文章目录 摘要一、Stream原理解析1.1、Stream总概1.2、Stream运行机制1.2.1、创建结点1.2.1、搭建流水线1.2.3、启动流水线 1.3、ParallelStream 二、性能对比三、优雅使用3.1 Collectors.toMap()3.2 findFirst()&#xff0c;findAny()3.3 增删元素3.4 ParallelStream 四、总结…