【Python使用】嘿马python高级进阶全体系教程第13篇:My Awesome Book,property属性【附代码文档】

26 阅读1分钟

🏆🏆🏆教程全知识点简介:1.静态Web服务器涵盖固定页面数据返回、命令行启动动态端口绑定。2. Python高级特性包括闭包变量修改、装饰器(定义、语法糖、执行时间统计)、property属性、with语句和上下文管理器、深拷贝和浅拷贝。3. 正则表达式涉及多字符匹配(*、{m,n})、开头结尾匹配(^$)、字符排除匹配、分组匹配。4. 操作系统基础包括操作系统概念、虚拟机软件、Ubuntu系统、Linux内核及发行版。5. Linux命令系统涵盖目录查看、路径操作、文件操作(ls、mkdir、rm、cp、mv)、重定向、文件内容查看、链接、压缩解压缩(tar、zip)。6. 系统管理包括文件权限(chmod)、用户权限(whoami、passwd)、用户创建、编辑器vim、软件安装卸载。7. 并发编程涵盖多任务概念、进程(进程编号获取、参数传递)、线程(执行特性、共享变量、死锁处理)、进程线程对比、协程(概念、优点、gevent)。8. 网络编程包括端口概念、TCP协议特点、socket使用、TCP开发流程、客户端服务端开发。9. HTTP协议涉及浏览器服务器通信、URL组成、开发者工具使用。


📚📚仓库code.zip 👉直接-->:   gitee.com/yinuo112/Ba…    🍅🍅

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

This file file serves as your book's preface, a great place to describe your book's content and ideas.

property属性

学习目标

  • 能够知道装饰器方式的property属性的定义方式

1. property属性的介绍

property属性就是负责把一个方法当做属性进行使用,这样做可以简化代码使用。

定义property属性有两种方式

  1. 装饰器方式

  2. 类属性方式

2. 装饰器方式

class Person(object):

    def __init__(self):
        self.__age = 0

    # 装饰器方式的property, 把age方法当做属性使用, 表示当获取属性时会执行下面修饰的方法
    @property
    def age(self):
        return self.__age

    # 把age方法当做属性使用, 表示当设置属性时会执行下面修饰的方法
    @age.setter
    def age(self, new_age):
        if new_age >= 150:
            print("成精了")
        else:
            self.__age = new_age

  
  
# 创建person
  
  
p = Person()
print(p.age)
p.age = 100
print(p.age)
p.age = 1000

threading 文档

运行结果:

0
100
成精了

email-validator 文档

代码说明:

FastAPI 文档

  • @property 表示把方法当做属性使用, 表示当获取属性时会执行下面修饰的方法

  • @方法名.setter 表示把方法当做属性使用,表示当设置属性时会执行下面修饰的方法

  • 装饰器方式的property属性修饰的方法名一定要一样。

3. 类属性方式

class Person(object):

    def __init__(self):
        self.__age = 0

    def get_age(self):
        """当获取age属性的时候会执行该方法"""
        return self.__age

    def set_age(self, new_age):
        """当设置age属性的时候会执行该方法"""
        if new_age >= 150:
            print("成精了")
        else:
            self.__age = new_age

    # 类属性方式的property属性
    age = property(get_age, set_age)

  
  
# 创建person
  
  
p = Person()
print(p.age)
p.age = 100
print(p.age)
p.age = 1000

tqdm 文档

运行结果:

0
100
成精了

代码说明:

  • property的参数说明:

    • 第一个参数是获取属性时要执行的方法

    • 第二个参数是设置属性时要执行的方法

4. 小结

  • 定义property属性有两种方式:

    1. 装饰器方式
    2. 类属性方式
  • 装饰器方式:

    1. @property 修饰获取值的方法
    2. @方法名.setter 修饰设置值的方法
  • 类属性方式:

    1. 类属性 = property(获取值方法, 设置值方法)

with语句和上下文管理器

学习目标

  • 能够知道自定义上下文管理器的两种方式

1. with语句的使用

基础班向文件中写入数据的示例代码:

  
  
# 1、以写的方式打开文件
  
  
 f = open("1.txt", "w")
 # 2、写入文件内容
 f.write("hello world")
 # 3、关闭文件
 f.close()

代码说明:

  • 文件使用完后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的

这种写法可能出现一定的安全隐患,错误代码如下:

  
  
# 1、以读的方式打开文件
  
  
 f = open("1.txt", "r")
 # 2、读取文件内容
 f.write("hello world")
 # 3、关闭文件
 f.close()

运行结果:

LightGBM 文档

Traceback (most recent call last):
  File "/home/python/Desktop/test/xxf.py", line 4, in <module>
    f.write("hello world")
io.UnsupportedOperation: not writable

代码说明:

  • 由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。
  • 为了保证无论是否出错都能正确地关闭文件, 可以使用try ... finally来解决

安全写法, 代码如下:

try:
    # 1、以读的方式打开文件
    f = open("1.txt", "r")
    # 2、读取文件内容
    f.write("xxxxx")

except IOError as e:
    print("文件操作出错", e)

finally:
    # 3、关闭文件
    f.close()

re 正则表达式

运行结果:

文件操作出错 not writable

这种方法虽然代码运行良好,但是缺点就是代码过于冗长,并且需要添加try-except-finally语句,不是很方便,也容易忘记.

在这种情况下,Python提供了 with 语句的这种写法,既简单又安全,并且 with 语句执行完成以后自动调用关闭文件操作,即使出现异常也会自动调用关闭文件操作

with 语句的示例代码:

  
  
# 1、以写的方式打开文件
  
  
with open("1.txt", "w") as f:
    # 2、读取文件内容
    f.write("hello world")

2. 上下文管理器

一个类只要实现了__enter__()和__exit__()这个两个方法,通过该类创建的对象 就称之为上下文管理器。

上下文管理器可以使用 with 语句,with语句之所以这么强大,背后是由上下文管理器做支撑的,也就是说刚才使用 open 函数创建的文件对象就是就是一个上下文管理器对象。

自定义上下文管理器类,模拟文件操作:

定义一个File类,实现 __enter__() 和 __exit__()方法,然后使用 with 语句来完成操作文件, 示例代码:

class File(object):

    # 初始化方法
    def __init__(self, file_name, file_model):
        # 定义变量保存文件名和打开模式
        self.file_name = file_name
        self.file_model = file_model

    # 上文方法
    def __enter__(self):
        print("进入上文方法")
        # 返回文件资源
        self.file = open(self.file_name,self.file_model)
        return self.file

    # 下文方法
    def __exit__(self, exc_type, exc_val, exc_tb):
        print("进入下文方法")
        self.file.close()


if __name__ == '__main__':

    # 使用with管理文件
    with File("1.txt", "r") as file:
        file_data = file.read()
        print(file_data)

运行结果:

进入上文方法
hello world
进入下文方法

*代码说明: