文章目录

      • 1. 什么是类 (Class)?
        • 1.1 定义一个类
      • 2. 什么是对象 (Object) 或实例 (Instance)?
        • 2.1 创建对象(实例化)
      • 3. 访问属性和调用方法
      • 4. 类属性 vs 实例属性
      • 5. `self` 的重要性
      • 总结
      • 练习题
      • 练习题答案

前几篇文章我们学习了变量、数据类型、控制流、函数、模块和包。这些都是编写程序的基础,但当程序规模越来越大、逻辑越来越复杂时,我们就需要一种更强大的方式来组织代码和数据。这就是 面向对象编程 (Object-Oriented Programming, OOP) 的核心—— 类 (Class)对象 (Object)

面向对象编程是一种编程范式,它将数据(属性)和操作数据的方法(行为)封装在一起,形成一个独立的单元。这使得代码更具模块化、可重用性高,并且易于维护。

1. 什么是类 (Class)?

在现实世界中,我们有各种各样的“事物”:汽车、人、动物、书籍等等。它们都有一些共同的特征(比如颜色、大小)和一些能做的事情(比如移动、说话)。

在 Python 中,就是这样一种“事物”的蓝图 (Blueprint)模板 (Template)。它定义了某一类事物的共同属性(数据)和行为(函数)。类本身并不是真实存在的“事物”,它只是一个抽象的定义。

例如,我们可以定义一个 Car 类,它描述了所有汽车共同的特征(如品牌、型号、颜色)和行为(如启动、停止、加速)。

1.1 定义一个类

在 Python 中,使用 class 关键字来定义一个类。

class Car: # 类名通常使用驼峰命名法 (CamelCase),首字母大写"""这是一个 Car 类,用于表示汽车。它定义了汽车的属性和行为。"""pass # pass 语句表示一个空的类体,什么也不做,但结构完整# 定义一个更具体的 Car 类
class Car:"""定义一个简单的汽车类"""# 类属性 (Class Attributes): 属于类本身,所有实例共享的属性# 例如,所有 Car 对象都会有 4 个轮子wheels = 4# 实例方法 (Instance Methods): 属于对象的方法# __init__ 是一个特殊方法,称为构造器或初始化方法# 当创建一个 Car 类的对象(实例)时,这个方法会被自动调用# self 参数是必须的,它指向当前正在创建的对象本身def __init__(self, brand, model, color):"""初始化 Car 对象。Args:brand (str): 汽车品牌。model (str): 汽车型号。color (str): 汽车颜色。"""# 实例属性 (Instance Attributes): 属于每个对象(实例)特有的属性# 每个 Car 对象都会有自己的 brand, model, colorself.brand = brandself.model = modelself.color = colorself.is_running = False # 初始状态为未启动def start(self):"""启动汽车。"""if not self.is_running:self.is_running = Trueprint(f"{self.brand} {self.model} 已启动。")else:print(f"{self.brand} {self.model} 已经在运行了。")def stop(self):"""停止汽车。"""if self.is_running:self.is_running = Falseprint(f"{self.brand} {self.model} 已停止。")else:print(f"{self.brand} {self.model} 已经停止了。")def display_info(self):"""显示汽车信息。"""print(f"品牌: {self.brand}, 型号: {self.model}, 颜色: {self.color}, 轮子数: {Car.wheels}")

关键概念解释:

  • class Car:: 定义了一个名为 Car 的类。
  • wheels = 4: 这是一个类属性。它属于 Car 类本身,所有由 Car 类创建的对象都会共享这个 wheels 属性,并且它的值默认为 4。
  • __init__(self, brand, model, color): 这是一个特殊的方法,被称为构造器 (Constructor)初始化方法
    • 当创建一个 Car 类的实例 (Instance) 时,Python 会自动调用这个 __init__ 方法来初始化新创建的对象。
    • self: 这是一个约定俗成的参数名,必须是实例方法的第一个参数。它代表了正在被创建的对象自身。通过 self,你可以在方法内部访问和修改对象的属性。
    • brand, model, color: 这些是初始化方法接收的参数,用于设置新对象的特定属性。
  • self.brand = brand: 它们是实例属性 (Instance Attributes)。这些属性是每个对象独有的。例如,一辆奥迪车的 brand 是 “Audi”,而另一辆奔驰车的 brand 是 “Mercedes”。
  • start(self), stop(self), display_info(self): 这些是实例方法 (Instance Methods)。它们是定义在类中的函数,用于描述对象可以执行的行为。每个方法也必须将 self 作为第一个参数。

2. 什么是对象 (Object) 或实例 (Instance)?

对象 (Object)实例 (Instance) 是类的具体实现。如果说类是“汽车”这个概念的蓝图,那么对象就是一辆辆真实存在的、有具体品牌、型号和颜色的汽车,比如“我的那辆红色的特斯拉 Model 3”。

你可以从一个类创建任意数量的对象,每个对象都是独立的,拥有自己的一套实例属性值,但它们都遵循类的蓝图。

2.1 创建对象(实例化)

通过在类名后面加上圆括号 (),就像调用函数一样,就可以创建一个类的对象。这个过程称为实例化 (Instantiation)

# 创建 Car 类的对象(实例化)# car1 是 Car 类的一个实例 (对象)
car1 = Car("Tesla", "Model 3", "Red")# car2 是 Car 类的一个独立实例 (对象)
car2 = Car("Mercedes", "C-Class", "Black")

Car("Tesla", "Model 3", "Red") 被调用时:

  1. Python 会在内存中创建一个新的 Car 对象。
  2. Python 会自动调用 Car 类的 __init__ 方法,并将新创建的对象作为 self 参数传递,同时将 "Tesla", "Model 3", "Red" 作为 brand, model, color 参数传递进去。
  3. __init__ 方法会为 car1 这个对象设置 brand, model, coloris_running 等实例属性。

3. 访问属性和调用方法

创建对象后,你可以使用点 . 运算符来访问对象的属性和调用对象的方法。

# 访问 car1 的实例属性
print(f"Car1 品牌: {car1.brand}")    # 输出: Car1 品牌: Tesla
print(f"Car1 型号: {car1.model}")    # 输出: Car1 型号: Model 3
print(f"Car1 颜色: {car1.color}")    # 输出: Car1 颜色: Red
print(f"Car1 初始运行状态: {car1.is_running}") # 输出: Car1 初始运行状态: False# 访问类属性 (可以通过类名或实例访问,但通过类名访问更清晰)
print(f"所有 Car 都有轮子数: {Car.wheels}") # 输出: 所有 Car 都有轮子数: 4
print(f"Car1 的轮子数: {car1.wheels}")     # 输出: Car1 的轮子数: 4# 调用 car1 的方法
car1.start()         # 输出: Tesla Model 3 已启动。
print(f"Car1 当前运行状态: {car1.is_running}") # 输出: Car1 当前运行状态: True
car1.start()         # 输出: Tesla Model 3 已经在运行了。
car1.stop()          # 输出: Tesla Model 3 已停止。
car1.stop()          # 输出: Tesla Model 3 已经停止了。# 调用 car1 的显示信息方法
car1.display_info()  # 输出: 品牌: Tesla, 型号: Model 3, 颜色: Red, 轮子数: 4# 访问 car2 的属性和调用方法
print("\n--- car2 的信息 ---")
car2.display_info()  # 输出: 品牌: Mercedes, 型号: C-Class, 颜色: Black, 轮子数: 4
car2.start()         # 输出: Mercedes C-Class 已启动。

可以看到,car1car2 是两个完全独立的对象,它们各自拥有自己的 brand, model, coloris_running 属性,并且可以独立地执行 start(), stop() 等方法。但它们共享 wheels 这个类属性。

4. 类属性 vs 实例属性

再次强调一下它们的区别:

  • 类属性 (Class Attributes):

    • 定义在类体中,但在任何方法之外。
    • 属于类本身,所有该类的实例共享同一个类属性。
    • 通常用于存储与类相关但不随实例变化的值,例如常量或者所有实例通用的配置。
    • 可以通过 ClassName.attribute_nameinstance_name.attribute_name 访问(尽管通过实例访问时,Python 最终还是会向上查找类属性)。
    • 修改类属性时,会影响所有实例。
  • 实例属性 (Instance Attributes):

    • __init__ 方法中通过 self.attribute_name = value 定义。
    • 属于每个独立的实例,每个实例都有自己的一份。
    • 用于存储每个对象特有的数据。
    • 只能通过 instance_name.attribute_name 访问。
    • 修改实例属性时,只影响当前的实例。
class Dog:species = "Canis familiaris" # 类属性def __init__(self, name, age):self.name = name # 实例属性self.age = age   # 实例属性dog1 = Dog("Buddy", 3)
dog2 = Dog("Lucy", 5)print(f"Dog1 的名字: {dog1.name}, 年龄: {dog1.age}, 物种: {dog1.species}")
print(f"Dog2 的名字: {dog2.name}, 年龄: {dog2.age}, 物种: {dog2.species}")# 改变类属性会影响所有实例 (以及通过类名访问)
Dog.species = "Canis lupus familiaris" # 假设是更精确的学名print(f"Dog1 的新物种: {dog1.species}") # 跟着变化
print(f"Dog2 的新物种: {dog2.species}") # 跟着变化# 改变实例属性只影响当前实例
dog1.name = "Bud"
print(f"Dog1 的新名字: {dog1.name}")
print(f"Dog2 的名字 (未变): {dog2.name}")

输出:

Dog1 的名字: Buddy, 年龄: 3, 物种: Canis familiaris
Dog2 的名字: Lucy, 年龄: 5, 物种: Canis familiaris
Dog1 的新物种: Canis lupus familiaris
Dog2 的新物种: Canis lupus familiaris
Dog1 的新名字: Bud
Dog2 的名字 (未变): Lucy

5. self 的重要性

self 是一个约定俗成的名称,它代表了当前正在操作的实例本身。在类的方法中,任何时候你需要访问或修改当前实例的属性,或者调用当前实例的其他方法,都必须通过 self. 来进行。

Python 会在调用实例方法时自动将实例作为第一个参数传递给 self

class Person:def __init__(self, name, age):self.name = nameself.age = agedef introduce(self):# 访问当前实例的 name 和 age 属性print(f"大家好,我叫 {self.name},我今年 {self.age} 岁了。")def celebrate_birthday(self):self.age += 1 # 修改当前实例的 age 属性print(f"{self.name} 庆祝了生日,现在 {self.age} 岁了!")self.introduce() # 调用当前实例的另一个方法p1 = Person("张三", 20)
p1.introduce()
p1.celebrate_birthday()

输出:

大家好,我叫 张三,我今年 20 岁了。
张三 庆祝了生日,现在 21 岁了!
大家好,我叫 张三,我今年 21 岁了。

总结

本篇我们深入探讨了 Python 面向对象编程的基础:

  • 类 (Class): 对象的蓝图或模板,定义了对象的属性(数据)和行为(方法)。使用 class 关键字定义。
  • 对象 (Object) 或实例 (Instance): 类的具体化,是基于类创建的真实存在的“事物”。通过 ClassName() 来创建。
  • __init__ 方法: 特殊的构造器,在创建对象时自动调用,用于初始化对象的实例属性。
  • self 参数: 实例方法中的第一个参数,指向当前正在操作的对象本身。
  • 类属性: 属于类本身,所有实例共享。
  • 实例属性: 属于每个独立的对象,每个对象独有。
  • 通过点 . 运算符访问属性和调用方法。

理解类和对象是迈向编写大型、复杂、可维护的 Python 程序的关键一步。它能帮助你更好地组织代码,模拟现实世界的实体,并构建出更具结构和逻辑的应用程序。

练习题

尝试独立完成以下练习题,并通过答案进行对照:

  1. 定义一个 Book 类:

    • 定义一个名为 Book 的类。
    • 在类中定义一个类属性 material = "paper"
    • 定义 __init__ 方法,接收 title (书名), author (作者), pages (页数) 作为参数,并将其存储为实例属性。
    • 定义一个实例方法 get_summary(),打印书的标题、作者和页数,格式为 "《[书名]》 作者: [作者], 共 [页数] 页。"
  2. 创建和使用 Book 对象:

    • 创建两个 Book 类的对象:
      • 一本名为 “Python编程入门” 的书,作者 “A. Programmer”,500 页。
      • 一本名为 “数据结构与算法” 的书,作者 “B. Coder”,800 页。
    • 分别调用这两个对象的 get_summary() 方法。
    • 访问其中一本书的 material 属性,并打印。
  3. 修改实例属性和类属性的影响:

    • Book 类中,将 material 类属性改为 "recycled paper"
    • 再次打印两本书的 material 属性,观察变化。
    • 修改其中一本 Book 对象的 pages 属性(例如,将页数从 500 改为 550)。
    • 再次调用该对象的 get_summary() 方法,观察变化。另一本书的页数是否受影响?
  4. 定义一个 Student 类:

    • 定义一个名为 Student 的类。
    • 定义一个类属性 school_name = "Python University"
    • 定义 __init__ 方法,接收 name (学生姓名), student_id (学号), grades (一个表示各科分数的列表,默认空列表 [])。注意默认参数的陷阱! 请使用正确的姿势处理 grades 参数的默认值。
    • 定义一个实例方法 add_grade(grade),用于向学生的 grades 列表中添加一个分数。
    • 定义一个实例方法 get_average_grade(),计算并返回学生的平均分。如果 grades 列表为空,返回 0。
    • 定义一个实例方法 display_student_info(),打印学生姓名、学号、学校名称和平均分。
  5. 创建和操作 Student 对象:

    • 创建两个 Student 对象:
      • 学生 A: 姓名 “李华”, 学号 “2023001”。
      • 学生 B: 姓名 “王明”, 学号 “2023002”,初始分数 [70, 80, 90]。
    • 为学生 A 添加分数:85, 92, 78。
    • 分别调用两个学生的 display_student_info() 方法。
    • 修改 Student 类的 school_name 为 “Global Python University”。
    • 再次调用学生 A 的 display_student_info() 方法,观察学校名称是否变化。

练习题答案

1. 定义一个 Book 类:

# 1. 定义一个 Book 类
class Book:"""表示一本书的类。"""material = "paper" # 类属性def __init__(self, title, author, pages):"""初始化 Book 对象。Args:title (str): 书的标题。author (str): 书的作者。pages (int): 书的页数。"""self.title = titleself.author = authorself.pages = pagesdef get_summary(self):"""打印书的标题、作者和页数。"""print(f"《{self.title}》 作者: {self.author}, 共 {self.pages} 页。")

2. 创建和使用 Book 对象:

# 2. 创建和使用 Book 对象
book1 = Book("Python编程入门", "A. Programmer", 500)
book2 = Book("数据结构与算法", "B. Coder", 800)book1.get_summary()
book2.get_summary()# 访问 material 类属性
print(f"Book1 的材质是: {book1.material}")
print(f"Book2 的材质是: {book2.material}")
print(f"Book 类的材质是: {Book.material}")

输出:

《Python编程入门》 作者: A. Programmer, 共 500 页。
《数据结构与算法》 作者: B. Coder, 共 800 页。
Book1 的材质是: paper
Book2 的材质是: paper
Book 类的材质是: paper

3. 修改实例属性和类属性的影响:

# 3. 修改实例属性和类属性的影响
# 修改类属性
Book.material = "recycled paper"
print(f"\n修改 Book.material 后:")
print(f"Book1 的材质: {book1.material}") # 跟着变化
print(f"Book2 的材质: {book2.material}") # 跟着变化
print(f"Book 类的材质: {Book.material}")# 修改实例属性
book1.pages = 550 # 只修改 book1 的页数
print(f"\n修改 book1.pages 后:")
book1.get_summary() # book1 的页数已改变
book2.get_summary() # book2 的页数未受影响

输出:

修改 Book.material 后:
Book1 的材质: recycled paper
Book2 的材质: recycled paper
Book 类的材质: recycled paper修改 book1.pages 后:
《Python编程入门》 作者: A. Programmer, 共 550 页。
《数据结构与算法》 作者: B. Coder, 共 800 页。

4. 定义一个 Student 类:

# 4. 定义一个 Student 类
class Student:"""表示一个学生的类。"""school_name = "Python University" # 类属性def __init__(self, name, student_id, grades=None): # 正确处理可变默认参数"""初始化 Student 对象。Args:name (str): 学生姓名。student_id (str): 学号。grades (list, optional): 学生各科分数的列表。默认为 None。"""self.name = nameself.student_id = student_id# 如果 grades 是 None,则初始化一个空列表;否则使用传入的列表self.grades = [] if grades is None else list(grades) # 使用 list(grades) 避免共享同一个列表def add_grade(self, grade):"""向学生的成绩列表中添加一个分数。"""if isinstance(grade, (int, float)):self.grades.append(grade)else:print("警告: 成绩必须是数字。")def get_average_grade(self):"""计算并返回学生的平均分。"""if not self.grades: # 如果列表为空return 0return sum(self.grades) / len(self.grades)def display_student_info(self):"""打印学生姓名、学号、学校名称和平均分。"""average = self.get_average_grade()print(f"\n--- 学生信息 ---")print(f"姓名: {self.name}")print(f"学号: {self.student_id}")print(f"学校: {Student.school_name}") # 通过类名访问类属性print(f"平均分: {average:.2f}") # 保留两位小数print("-" * 15)

5. 创建和操作 Student 对象:

# 5. 创建和操作 Student 对象
# 学生 A: 姓名 "李华", 学号 "2023001"。
student_a = Student("李华", "2023001")# 学生 B: 姓名 "王明", 学号 "2023002",初始分数 [70, 80, 90]。
student_b = Student("王明", "2023002", [70, 80, 90])# 为学生 A 添加分数
student_a.add_grade(85)
student_a.add_grade(92)
student_a.add_grade(78)# 分别调用两个学生的 display_student_info() 方法
student_a.display_student_info()
student_b.display_student_info()# 修改 Student 类的 school_name
Student.school_name = "Global Python University"
print("\n--- 修改学校名称后 ---")# 再次调用学生 A 的 display_student_info() 方法,观察学校名称是否变化
student_a.display_student_info()
student_b.display_student_info() # 同样也受影响

输出:

--- 学生信息 ---
姓名: 李华
学号: 2023001
学校: Python University
平均分: 85.00
------------------ 学生信息 ---
姓名: 王明
学号: 2023002
学校: Python University
平均分: 80.00
------------------ 修改学校名称后 ------ 学生信息 ---
姓名: 李华
学号: 2023001
学校: Global Python University
平均分: 85.00
------------------ 学生信息 ---
姓名: 王明
学号: 2023002
学校: Global Python University
平均分: 80.00
---------------

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精准数据检索+数据飞轮自驱优化,彩讯AI知识库助力企业知识赋能和效率创新

近两年,人工智能技术的精细化发展,让知识库概念重新成为“热门词汇”,腾讯ima等智能工作台产品为个人用户打造专属知识库,而面向B端市场,企业AI知识库也逐步成为企业集中存储与管理核心文档、数据、经验和流程的知识中…

打破空间边界!Nas-Cab用模块化设计重构个人存储逻辑

文章目录前言1. Windows安装Nas-Cab2. 本地局域网连接Nas-Cab3. 安装Cpolar内网穿透4. 固定Nas-Cab 公网地址"数据管理不该受制于硬件形态或地理边界。这个开源方案证明:当功能模块化且可扩展时,私有云可以像水一样渗透进所有设备——现在就去Git仓…

Sigma-Aldrich细胞培养基础知识:细胞培养的安全注意事项

细胞培养实验室风险评估风险评估的主要目的是防止人员受伤,保护财产,并避免对个人和环境的伤害。在许多国家,法律要求进行风险评估。例如,英国的《英国职业健康与安全法案(1974年)》就是一个例子。欧洲共同…

Imx6ull用网线与电脑连接

理解工作方式没有路由器时,可以使用,只要保持虚拟机的两个网卡一个与电脑在同一网,一个与板子在同一网段(保持通信)就可以从虚拟机往板子下载第一步:查看电脑连接的网络这一步是在找到主机ip地址这两步在其他同类教程里一样的第二步:设置以太…

力扣454.四数相加Ⅱ

给你四个整数数组 nums1、nums2、nums3 和 nums4 &#xff0c;数组长度都是 n &#xff0c;请你计算有多少个元组 (i, j, k, l) 能满足&#xff1a;0 < i, j, k, l < nnums1[i] nums2[j] nums3[k] nums4[l] 0示例 1&#xff1a;输入&#xff1a;nums1 [1,2], nums2 …

Joplin:一款免费开源、功能强大且注重隐私的笔记软件

Joplin 是一款免费开源、功能强大且注重隐私的笔记和待办事项应用程序&#xff0c;它的设计目标是成为 Evernote 等流行笔记应用的强大替代品&#xff0c;尤其适合重视数据所有权和隐私的用户。 功能特性 Joplin 的核心定位与优势如下&#xff1a; 完全开源&#xff1a;代码公…

渗透前四天总结

目录 一.DNS DNS 基本概述 DNS解析过程 二.HTTPS TLS握手过程 RSA加密 对称加密&#xff1a; 非对称加密&#xff1a; RSA加密过程 三.使用xdebug调试php 四.信息收集 一.DNS DNS 基本概述 DNS&#xff1a;域名系统(DomainNameSystem)因特网的一项核心服务&#xf…

Python----NLP自然语言处理(中文分词器--jieba分词器)

一、介绍文本语料在输送给NLP模型前&#xff0c;需要一系列的预处理工作&#xff0c;才能符合模型输入的要求。对于NLP来说&#xff0c;他学习一篇人类书写的文章不是整体的来学习&#xff0c;而是一个词一个词的来学习。所以文本预处理的第一个步骤就是对文本进行分词处理。&a…

深入了解linux系统—— 进程信号的保存

信号 信号&#xff0c;什么是信号&#xff1f; 在现实生活中&#xff0c;闹钟&#xff0c;红绿灯&#xff0c;电话铃声等等&#xff1b;这些都是现实生活中的信号&#xff0c;当闹钟想起时&#xff0c;我就要起床&#xff1b;当电话铃声想起时&#xff0c;我就知道有人给我打电…

Redis 事务错误处理机制与开发应对策略

&#x1f4d8; Redis 事务错误处理机制与开发应对策略一、Redis 事务基础回顾 Redis 中的事务由以下三组命令构成&#xff1a;命令作用说明MULTI开始一个事务&#xff0c;进入命令入队模式命令集所有后续命令不会立即执行&#xff0c;而是入队等待提交EXEC提交事务&#xff0c;…

信息学奥赛一本通 1549:最大数 | 洛谷 P1198 [JSOI2008] 最大数

【题目链接】 ybt 1549&#xff1a;最大数 洛谷 P1198 [JSOI2008] 最大数 【题目考点】 1. 线段树&#xff1a;单点修改 区间查询 知识点讲解见&#xff1a;洛谷 P3374 【模板】树状数组 1&#xff08;线段树解法&#xff09; 【解题思路】 本题为设线段树维护区间最值&a…

【STM32】什么在使能寄存器或外设之前必须先打开时钟?

这篇文章解释一个非常基础但是重要的问题&#xff1a; 为什么在使能寄存器或外设之前必须先打开时钟&#xff1f; 我们会发现&#xff0c;如果不开时钟就访问寄存器 ⇒ 会“写不进去”或“读取错误”。 因此&#xff0c;我们在写代码时&#xff0c;总是需要 先开时钟&#xff0…

Go·并发处理http请求实现

一、Goroutine介绍 基本原理 goroutine 是 Go 运行时(Runtime)管理的​​用户态线程。与线程相比,其初始栈空间仅约 2KB,创建和切换的开销更低,能够同时运行大量并发任务。 创建goroutine的方法非常简单,在将要调用的函数前加入go关键字即可。 func hello() {fmt.Pri…

USB一线连多屏?Display Link技术深度解析

DisplayLink 技术是一种基于USB接口的显示输出解决方案&#xff0c;通常用于通过USB端口连接多个显示器&#xff0c;尤其在笔记本电脑、平板电脑和台式机上&#xff0c;能够显著扩展显示屏的数量和分辨率。它的核心技术原理是通过压缩和传输图形数据&#xff0c;将视频信号通过…

AI 临床医学课题【总结】

最近参与了几个临床医学课题,总结一下如何跨界结合 1: 确定研究的方向: 这个是决定文章的核心 研究方向的时候,就要确定要投的期刊,平时看论文的时候要把一些常用的术语记录下来, 投的期刊,研究内容,方法记录一下。 2: 研究团队团队搭建(负责人:负责读论文,研究点…

PostgreSQL HOT (Heap Only Tuple) 更新机制详解

PostgreSQL HOT (Heap Only Tuple) 更新机制详解在PostgreSQL中&#xff0c;为了提高更新操作的性能并减少存储空间的浪费&#xff0c;引入了一种称为HOT (Heap Only Tuple) 的优化技术。HOT更新允许在相同的数据页内进行行的更新操作&#xff0c;而不需要创建一个新的物理行版…

macos安装iper3

brew install iperf3Running brew update --auto-update...安装homebrew&#xff0c;长久没用使用更新失效了。只好重新安装 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"破案了 原来是需要海外网了。。。。 b…

【设计模式】策略模式(政策(Policy)模式)

策略模式&#xff08;Strategy Pattern&#xff09;详解一、策略模式简介 策略模式&#xff08;Strategy Pattern&#xff09; 是一种 行为型设计模式&#xff08;对象行为型模式&#xff09;&#xff0c;它定义了一系列算法&#xff0c;并将每一个算法封装起来&#xff0c;使它…

用TensorFlow进行逻辑回归(二)

逻辑回归的例子 逻辑回归是经典的分类算法。为了简单&#xff0c;我们考虑二分类。这意味着&#xff0c;我们要处理识别二个分类的问题&#xff0c;我们的标签为 0 或 1。 我们要一个与线性回归不同的激活函数&#xff0c;不同的损失函数&#xff0c;神经元的输出略有不同。我们…

Java设计模式之行为型模式(命令模式)介绍与说明

一、核心定义与目标 命令模式通过对象化请求&#xff0c;将操作的具体实现细节隐藏在命令对象中&#xff0c;使得调用者&#xff08;Invoker&#xff09;无需直接与接收者&#xff08;Receiver&#xff09;交互&#xff0c;仅需通过命令对象间接调用。这种解耦设计支持以下功能…