Python 单继承、多继承、@property、异常、文件操作、线程与进程、进程间通信、TCP框架 7.24

news2024/12/26 21:31:42

单继承

class luban:
    def __init__(self, name):
        self.name = name
        self.skill = "摸鱼飞弹"
        self.damageLevel = 20

    def attack(self):
        print("{} 使用了技能{} ,给敌方带来了极大的困扰\n"
              "并有{}% 的机会造成一击必杀的效果".format(self.name, self.skill, self.damageLevel))


class luban7(luban):
    pass

# __name__ :魔法方法:类似于main函数,只在当前python文件做一个测试的入口
# 一旦运行,系统直接执行 __name__ 入口下的代码
if __name__ == '__main__':  # 输入main提示补全
    lu = luban7("鲁班七号")
    lu.attack()  # 访问基类继承过来的方法

多继承

class luban:
    def __init__(self, name):
        self.name = name
        self.skill0 = "摸鱼飞弹"
        self.damageLevel = 20

    def attack(self):
        print("{} 使用了技能{} ,给敌方带来了极大的困扰\n"
              "并有{}% 的机会造成一击必杀的效果".format(self.name, self.skill0, self.damageLevel))


class spaceLab:
    def __init__(self, name):
        self.name = name
        self.skill1 = "太空嘴炮"
        self.perDamage = 30

    def attack(self):
        print("{} 使用了技能{} ,给敌方带来了极大的困扰\n"
              "并有{}% 的机会摧毁敌方水晶".format(self.name, self.skill1, self.perDamage))


# 多继承,继承顺序 从右边开始,左边类的方法被继承会隐藏右边类的同名方法
class luban7(luban, spaceLab):
    # 派生类重写 __init__ 魔法方法
    def __init__(self, name):
        # 显示调用基类的 构造函数进行初始化 基类部分
        spaceLab.__init__(self, name)
        luban.__init__(self, name)
        self.name = name
        self.skill2 = "7号嘴炮"
        self.damage = 50

    def attack(self):
        print("{} 使用了技能{} ,给敌方带来了极大的困扰\n"
              "并有{}% 的机会摧毁自家水晶".format(self.name, self.skill2, self.damage))

    def attack0(self):
        luban.attack(self)

    def attack1(self):
        spaceLab.attack(self)


# __name__ :魔法方法:类似于main函数,只在当前python文件做一个测试的入口
# 一旦运行,系统直接执行 __name__ 入口下的代码
if __name__ == '__main__':  # 输入main提示补全
    lu = luban7("鲁班七号")
    lu.attack()
    lu.attack0()
    lu.attack1()  # 访问基类继承过来的方法

@property

class Demo:
    def __init__(self, v):
        self.__value = v

    @property  # @property说明函数时,函数名可以当成一个成员变量的使用,目的是获得属性,提示程序效率
    def set(self):
        return self.__value

    @set.setter  # @ xxx.setter说明下面,xxx必须是前面代码行定义的函数名
    def set(self, v):
        self.__value = v


if __name__ == '__main__':
    obj = Demo(20)
    # obj.set(30)
    # print(obj.set())
    print(obj.set)
    obj.set = 30
    print(obj.set)  # 直接访问函数名,相当于在访问 __value

获取目录流

import os

path = "../day2"
# os.path.exists():检测某个路径是否存在
if os.path.exists(path):
    print("文件夹存在")
else:
    print("文件夹不存在")
    # mkdir(): 创建一个目录
    os.mkdir(path)
# listdir() :列举出某个路径中的所有文件名,返回文件名的列表
files = os.listdir(path)  # 当前文件夹下的所有文件名
print(type(files))
print(files)
print("1212")
for file in files:
    if os.path.isfile(path + "/" + file):
        print(file, "普通文件")
    elif os.path.isdir(path + "/" + file):
        print(file, "目录文件")

文件的操作

在这里插入图片描述
在这里插入图片描述

import os

if __name__ == '__main__':
    # file = open(file="./file.txt", mode="w+")
    with open(file="./file.txt", mode="a+") as fd:
        # seek() : 让文件指针进行偏移
        fd.seek(0, os.SEEK_SET)

        # read(n)指定从文件中读取n字节数据 read()中不写参数n时,表示默认读取所有数据
        # buf = fd.read(32)
        # print(type(buf))
        # print(buf)
        # readline(n) : 读取一行中前n个数据
        # readliness() : 读取文件所有行的数据,返回一个列表
        buf = fd.readline(5)
        #  buf = fd.readlines()
        print(buf)
        # 关闭打开的文件
        fd.close()
    print("hello world")
---------------------------------------------------------------------
    try:
        file = open("file.txt", "w")
        file.write("nihaomemedaa\n")

    except (IOError, FileNotFoundError) as err:
        print("open", err)
        exit(-1)

    try:
        buf = "123456789\n"
        file.write(buf)

        buf1 = b"hello world\n"
        file.write(buf1.decode())

        l1 = ["nice\n"]
        file.write(l1[0])

        # writelines() : 将列表中的所有数据写入文件中,列表中的元素要求必须是字符串类型
        l2 = ["I'm groot ", "Spide man ", "Iron man"]
        file.writelines(l2)

    except (TypeError,) as err:
        print("write:", err)
        exit(-1)

    file.close()

异常

def res(x, y):
    if y == 0:
        # 手动抛出异常
        raise ValueError("y == 0") # 构造值错误的匿名对象
    return x/y


if __name__ == '__main__':
    a = int(input("a="))
    b = int(input("b="))
    try:
        print("x / y =", res(a, b))
    except (ValueError, ) as err:  # 接受和捕获异常 后面必须跟元组类型,如果异常类型只有1种,那么必须要用,占位
        print("除数y不能为0", err)

多线程

from time import sleep

# import threading
from threading import Thread


def music(name):
    for i in range(5):
        print("I was listening music:{}".format(name))
        sleep(1)


def study(name):
    for i in range(2):
        print("I was study:{}".format(name))
        sleep(5)


if __name__ == '__main__':
    # music("Always online")
    # study("《杀死那只知更鸟》")
    # 构造一个线程,指定target指定线程执向函数,args向线程执行函数传递数据
    t1 = Thread(target=music, args=("Always online", ))
    t1.start()  # 启动线程
    t2 = Thread(target=study, args=("《杀死那只知更鸟》", ))
    t2.start()

    t1.join()  # 阻塞等待回收线程资源
    t2.join()

多进程

from multiprocessing import Process
from time import sleep


def music(name):
    for i in range(5):
        print("I was listening music:{}".format(name))
        sleep(1)


def study(name):
    for i in range(2):
        print("I was study:{}".format(name))
        sleep(5)


if __name__ == '__main__':
    # music("Always online")
    # study("《杀死那只知更鸟》")
    # 构造一个进程,指定target指定线程执向函数,args向进程执行函数传递数据
    t1 = Process(target=music, args=("Always online", ))
    t1.start()  # 启动线程
    t2 = Process(target=study, args=("《杀死那只知更鸟》", ))
    t2.start()

    t1.join()  # 阻塞等待回收进程资源
    t2.join()

互斥锁

from time import sleep

# import threading
from threading import Thread, Lock


def music(name, lock):
    with lock:  # 使用互斥锁,自动加锁,用完自动解锁
        for i in range(5):
            print("I was listening music:{}".format(name))
            sleep(1)


def study(name, lock):
    with lock:
        for i in range(2):
            print("I was study:{}".format(name))
            sleep(5)


if __name__ == '__main__':
    lock = Lock()  # 定义互斥锁
    # music("Always online")
    # study("《杀死那只知更鸟》")
    # 构造一个线程,指定target指定线程执向函数,args向线程执行函数传递数据
    t1 = Thread(target=music, args=("Always online", lock))
    t1.start()  # 启动线程
    t2 = Thread(target=study, args=("《杀死那只知更鸟》", lock))
    t2.start()

    t1.join()  # 阻塞等待回收线程资源
    t2.join()

Python进程间通信的方法

管道

在这里插入图片描述

消息队列

在这里插入图片描述

共享内存

在这里插入图片描述

TCP服务器

在这里插入图片描述

from socket import *

# 创建套接字,构造套接字类对象
sockfd = socket(AF_INET, SOCK_STREAM, 0)
# 设置端口重用
sockfd.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
# 绑定
sockfd.bind((INADDR_ANY.to_bytes(0, byteorder="little"), 6666))
# 监听
sockfd.listen(10)

while True:
    # 阻塞等待 接受客户端连接
    # (connfd, addr) = sockfd.accept()
    connfd, cliaddr = sockfd.accept()

    """
        创建线程,传递连接套接字,实现多线程的TCP服务器
    """

    print(cliaddr)
    while True:
        buf = connfd.recv(32).decode()
        print("recv:", buf)
        if len(buf) == 0:
            break
        if buf == "exit":
            connfd.close()
            sockfd.close()
            exit(-1)

    connfd.close()

TCP客户端

from socket import *
# 创建套接字
sockfd = socket(AF_INET, SOCK_STREAM, 0)
# 连接
sockfd.connect(("127.0.0.1", 6666))

while True:
    data = input("data=").encode()
    sockfd.send(data)

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

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

相关文章

初识socket编程的相关概念

文章目录 IP地址和MAC地址源IP地址和目的IP地址 端口号(port)端口号和PID 初识TCP/UDP协议TCPUDP可靠/不可靠传输 网络字节流理解socket套接字概念socket常见APIsocket接口参数中的结构体 IP地址和MAC地址 IP协议有两个版本,IPv4和IPv6,凡是提到IP协议&…

STC12C5A60S2 单片机串口2的通信功能测试

根据手册说明,STC12C5A60S2 系列单片机可以直接使用 reg51.h 的头文件,只是在用到相应的特殊功能寄存器时,要做相应的定义即可。 笔记来自视频教程链接: https://www.bilibili.com/video/BV1Qq4y1Z7iS/?spm_id_from333.880.my_history.page…

python绘制地图时添加比例尺

目前为止我没有找到cartopy包自动添加地图比例尺的方式,我结合别人的代码写了这个手动添加比例尺的函数,个人觉得在外观上比线段比例尺漂亮一些。之所以是手动的,是因为这种方法不会根据你的地图坐标系和投影自动生成比例尺,而需要…

SpringCloud学习路线(9)——服务异步通讯RabbitMQ

一、初见MQ (一)什么是MQ? MQ(MessageQueue),意思是消息队列,也就是事件驱动架构中的Broker。 (二)同步调用 1、概念: 同步调用是指,某一服务…

Mysql表的查找进阶

重点细节知识&#xff1a;NULL是表示表里这个格子是空着的&#xff0c;NULL参与各种运算都是->false&#xff0c;但是只有这个才是可以用NULL等于NULL成功的 <>。,看一下&#xff0c;下图的区别&#xff0c;下面的是连空也算上了 补充一个is 用法&#xff0c;和上面语…

ubuntu docker离线安装docker(.deb包方式)(成功)(附卸载方法)

参考文章&#xff1a;Install Docker Engine on Ubuntu 文章目录 安装步骤下载安装包拷贝到目标主机并执行安装命令 验证拉取运行容器测试build dockerfile测试持久运行容器测试主机重启后&#xff0c;docker各服务是否正常自启 卸载方法附&#xff1a;各安装包作用说明&#x…

【iPadOS 开发】打开 iPad 的开发者模式的方法

文章目录 1. 前提条件2. 具体方法 1. 前提条件 iPad 通过 Type-C 线连接到 Mac Mac上已经安装 Xcode 2. 具体方法 在 Xcode 顶栏中的 Window 中打开 Devices and Simulators &#xff0c;可以看到自己的设备&#xff1a; 接着在 iPad 上进入 设置 > 隐私与安全性 > 开…

2023年Houdini电脑配置推荐,附上10款Houdini渲染器

SideFX Houdini是一款非常强大的工具&#xff0c;旨在创建最高质量的电影效果。它需要强大的系统来实现平稳的工作流程。赞奇云工作站为 SideFX Houdini找到最佳的 CPU、GPU 和渲染器。 什么是 SideFX Houdini&#xff1f; SideFX Houdini是一款 3D 动画和视觉效果软件&#…

监狱人员定位系统:提高监狱安全性及维护社会安全的工具

如何提高监狱安全性一直是社会关注的焦点。在现代化的安全管理工具中&#xff0c;监狱人员定位系统正逐渐被广泛应用于各地监狱。通过实时定位和监控&#xff0c;这一系统能够有效提高监狱安全性和管理效率&#xff0c;维护社会的安全和稳定。 那么&#xff0c;在这篇文章中&a…

Spring,SpringBoot,Spring MVC的区别是什么

1.Spring是什么 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff09;&#xff0c;它是⼀个开源框架&#xff0c;有着活跃⽽庞⼤的社区&#xff0c;这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景&#xff0c;它可以让 Java 企业级…

Python实现Up数据信息采集 <内含JS逆向解密>

目录标题 前言环境使用:模块使用:实现基本流程:代码展示&#xff1a;尾语 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: python 3.8 >>> 运行代码 pycharm 2021.2 >>> 辅助敲代码 模块使用: 第三方模块 需要安装 import requests >…

chapter12:SpringBoot与检索

Spring Boot与检索视频 1. 简介 我们的应用经常需要添加检索功能&#xff0c;开源的ElasticSearch是目前全文搜索引擎的首选。 他可以快速的存储、搜索和分析海量数据。SpringBoot通过整合Spring Data ElasticSearch为我们提供了非常便捷的检索功能支持。 ElasticSearch是一…

骨头的诱惑题解

样例输入1&#xff1a; 4 4 5 S.X. ..X. ..XD ....样例输出1&#xff1a; NO样例输入2&#xff1a; 3 4 5 S.X. ..X. ...D样例输出2&#xff1a; YES思路分析&#xff1a; 看到能否到达终点的题目先想 d f s dfs dfs。但这道题规定必须刚好 T T T秒到达&#xff0c;所…

记一次对Ghidra反编译的修复

前言 Ghidra是NSA在2019年开源的逆向工具&#xff0c;可以说从开源发布开始&#xff0c;就基本成了开源界唯一可以与 IDA 竞争的存在&#xff0c;其它的工具多少总是欠点意思。不过从实际情况来看&#xff0c;虽然 Ghidra一直在积极维护&#xff0c;但是现在的Bug情况跟IDA相比…

【《Azure、DevOps和微服务软件架构实战(第2版)》——教你构建并交付可满足组织业务需求的高度可扩展的企业应用程序】

本书的编写方式与很多技术书籍不同&#xff0c;作者站在架构师的视角&#xff0c;以一个项目的整个生命周期为主线&#xff0c;向读者展示了如何在云时代设计和实现一款软件&#xff0c;其内容涵盖了从软件架构设计的基本原则、需求收集、解决方案设计&#xff0c;可选技术架构…

扫码自测,全对有奖!《人月神话》知识自测卷01-共10题

自测链接 https://www.101test.com/cand/index?paperIdUH5KRN 最先答对全部题目的前三名将获赠清华大学出版社近年出版的新书。 请把全对(10分)的截屏发给微信号13811867132&#xff08;备注&#xff1a;人月兑奖&#xff09;&#xff0c;并留下相关信息。 1. [单选] 在&qu…

Vue3兄弟组件之间传值-mitt

Vue3兄弟组件之间传值-使用mitt插件 环境vue3tsvite 1.安装mitt 在终端cd到项目目录运行 npm install mitt安装成功在package.json文件会有显示 2.在main.js里面全局引用 // An highlighted block import mitt from mitt app.config.globalProperties.$mitt mitt()3.此时…

低代码开源项目汇总

低代码是基于可视化和模型驱动理念&#xff0c;结合云原生与多端体验技术&#xff0c;它能够在多数业务场景下实现大幅度的提效降本&#xff0c;为专业开发者提供了一种全新的高生产力开发范式。 不定期汇总更新一些低代码开源项目。 1、Appsmith Appsmith 是一款开源低代码…

根据UIL下载图片/视频、根据URL自动下载图片/视频、GUI自动下载想要的图片

1&#xff0c;根据UIL下载图片/视频 def downForInterface(file_path):count 1value_rows []with open(file_path, encodingUTF-8) as file:f_csv csv.reader(file)for r in f_csv:value_rows.append(r)for file_path in value_rows:cunmulu if . in file_path[0]:print(cu…

Java毕业设计-汽车出租系统【含源码、论文】

前言 汽车出租管理系统&#xff1a; 随着当今社会科学技术的高速发展&#xff0c;人民的生活水平不断的提高&#xff0c;自由行也开始盛行。有些人为了方便&#xff0c;选择汽车租赁的方式出行&#xff0c;因此汽车租赁成为一个极具市场潜力的行业。面对日趋发展的租赁市场&a…