python面向对象

article/2025/9/6 4:24:48

可调用对象的范围包括:用户定义的函数,匿名函数,内置函数和内置方法,类,在类中定义的方法,生成器函数,如果类实现了_call 方法,那么类的实例对象也是可调用对象。


1 变量

1.1 类属性和实例属性

1.1.1 类属性

类属性就是这个类所拥有的属性(变量),类属性被该类的所有实例对象所共有。对于公有的类属性,在类外可以通过类名或实例对象来访问。

类属性还分为公用类属性和私有类属性

公有类属性:在类外和类内都能访问

私有类属性:只能在类内访问,如果想在类外用类名或者实例对象访问,则

object._classname_attrName
object对象名,className类名,attrName私有类属性

声明方法:共有类属性直接定义在类里面即可,私有类属性需要在属性前面加两个下划线

1.1.2 实例属性

实例属性是该类的实例对象所拥有的,类对象无法拥有(通过类名无法访问实例属性)。

定义方式:定义在类的_init_函数里

1.2 全局变量和局部变量

按作用范围分为全局变量和局部变量
全局变量:在函数外创建的变量
局部变量:在函数内部创建的变量,局部变量不会影响全局变量。


函数1表示输出全局变量name,函数2只是表示创建一个局部变量,其他啥也没干

私有变量:单下划线开头的变量,这种变量只能在类内部访问。


2 函数

2.1 类方法、实例方法和静态方法

按方法所属类别分类,类方法、实例方法和静态方法

类方法可以通过实例对象和类对象调用

实例方法只能通过实例方法调用

静态方法只能通过类对象调用

2.1.1 类方法

定义:类方法是这个类所拥有的方法,

声明方法:需要用修饰器@classmethod来标识其为类方法。对于类方法,第一个参数默认为cls(当然也可以用其他名称的变量作为其第一个参数,但是大部分人都习惯以cls作为第一个参数的名字,就最好用cls了),cls表示类本身。能够通过实例对象和类对象(类名)去访问。

2.1.2 实例方法

定义:就是普通的方法

声明方法:实例方法不需要任何修饰器,第一个参数默认为self,表示实例对象本身。


2.1.3 静态方法

魔法属性或方法:一个双下划线开头的函数或者变量称为魔法属性或方法。
*args:把函数参数列表里剩余的参数打包到一个元组里。

yield:

注意:函数也是对象,可以作为返回值来返回
该题return里的inner是函数,函数也是对象,所以这里只是返回了,没有执行


如果想要执行inner的话,写outer()()

_init_与_new_的区别
init需要传递参数self,self指向实例,执行init不返回实例
new需要传递参数cls,cls指向类本身,执行new会返回一个实例
单例模式,类只能实例化一个对象。可以用new来实现。
实现过程如下
class Bar(object):
    __instance = None  # 类变量,用于存储单例实例

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:  # 检查是否已经创建了实例
            cls.__instance = object.__new__(cls)  # 调用 object.__new__ 创建实例
        return cls.__instance  # 返回单例实例

# 创建两个 Bar 类的实例
a = Bar()
b = Bar()

# 打印两个实例的内存地址
print(id(a))  # 输出 a 的内存地址
print(id(b))  # 输出 b 的内存地址

1.  *args 含义: *args  用于收集函数调用时传递的任意数量的位置参数(即不带参数名的参数)。它将这些参数收集到一个元组中。
2.  **kwargs 含义: **kwargs  用于收集函数调用时传递的任意数量的键值对参数(即带参数名的参数)。它将这些参数收集到一个字典中。

子类继承父类,
若子类没有自己的构造函数init,那么什么也不用写,子类会自动调用父类的构造函数,
若子类有自己的构造函数,父类的构造函数不再自动调用。如果想要使用父类的属性,则需要显式调用父类的构造函数super()._init_()

2.2 构造方法、析构方法、普通方法、魔术方法

2.2.1 构造方法

构造方法是用于创建对象时初始化实例的特殊方法,Python 中的构造方法是 __init__。它会在对象创建时自动调用,用于为对象分配内存并初始化其属性。

  • 定义方式__init__(self, ...)

2.2.2 析构方法

析构方法是对象销毁时自动调用的特殊方法,Python 中的析构方法是 __del__。它用于清理对象资源,例如关闭文件、释放内存等。

  • 定义方式__del__(self)
  • 功能:在对象销毁前进行清理操作

示例

class MyClass:def __init__(self, name):self.name = nameprint(f"{self.name} object created!")def __del__(self):  # 析构方法print(f"{self.name} object destroyed!")obj = MyClass("Alice")
del obj  # 手动销毁对象

2.2.3 普通方法

普通方法是指除了构造方法、析构方法、类方法和静态方法之外的其他方法。它们通常用于对象的行为操作,访问对象的属性或修改对象的状态。

  • 定义方式:普通方法的第一个参数通常是 self
  • 功能:用于实现对象的具体行为

2.2.4 魔术方法

魔术方法是 Python 中以双下划线(__)开头和结尾的方法,它们定义了对象的特殊行为。例如,__str__ 方法用于返回对象的字符串表示,__add__ 方法用于实现加法运算符的行为。

  • 定义方式:通常以双下划线包围的方法名。
  • 功能:定义特殊操作符、转换方法、对象比较等行为。

示例

class MyClass:def __init__(self, value):self.value = valuedef __str__(self):  # 魔术方法,返回对象的字符串表示return f"MyClass object with value {self.value}"obj = MyClass(42)
print(obj)  # 自动调用 __str__ 方法

2.3 公共方法、保护方法、私有方法

公共方法是最常见的方法,

保护方法是类内部的方法,可以被子类调用

私有方法是类内部的方法,不可以被子类调用

3装饰器


3.1 定义

本质上是一个接收函数作为输入并返回一个新的包装过后的函数的对象。

Python 装饰允许在不修改原有函数代码的基础上,动态地增加或修改函数的功能。

装饰器(decorators)是 Python 中的一种高级功能,它允许你动态地修改函数或类的行为。
装饰器是一种函数,它接受一个函数作为参数,并返回一个新的函数或修改原来的函数。装饰器的语法使用 @decorator_name 来应用在函数或方法上。

3.2 分类

3.2.1 函数装饰器

3.2.2 类装饰器


应用场景:实现单例模式,记录日志

3.2.3 内置装饰器


Python 提供了一些内置的装饰器,例如:
@staticmethod: 将方法定义为静态方法,不需要实例化类即可调用。
@classmethod: 将方法定义为类方法,第一个参数是类本身(通常命名为 cls)。
@property: 将方法转换为属性,使其可以像属性一样访问。


http://www.hkcw.cn/article/kVqlLQZkKh.shtml

相关文章

纯html,js创建一个类似excel的表格

后台是php,表中数据可编辑,可删除,可提交到数据库 <!DOCTYPE html> <html> <head><meta charset="utf-8"><style>body {font-family: Arial, sans-serif;margin: 20px;background-color: #fff;}.toolbar {margin-bottom: 10px;disp…

【测试】设计测试⽤例方法

设计测试⽤例方法 等价类 依据需求将输入&#xff08;特殊情况下会考虑输出&#xff09;划分为 若⼲个等价类 &#xff0c;从等价类中 选出⼀个测试⽤例 &#xff0c;如果 这个测试⽤例测试通过&#xff0c;则 认为所代表的等价类测试通过 &#xff0c;这样就可以⽤较少的测试…

摩尔信使MThings无法生成机器码的解决方法

在使用摩尔信使MThings的过程中&#xff0c;部分用户&#xff08;Win11操作系统&#xff09;可能会遇到无法生成机器码的问题&#xff0c;这将影响软件的正常授权。机器码是软件授权管理的关键环节&#xff0c;用于确保授权证书与特定设备的绑定。 解决步骤&#xff1a; 1、按 …

设计师如何搭建自己的素材库?

在数字化设计时代&#xff0c;设计资产已成为团队核心竞争力的重要组成部分。无论是UI组件、品牌视觉规范&#xff0c;还是交互原型和历史版本文件&#xff0c;这些资源的高效管理直接影响着设计质量和团队协作效率。然而&#xff0c;许多设计师仍深陷“文件混乱-重复劳动-版本…

AU6815集成音频DSP的2x25W数字型ClaSS D音频功率放大器(替代TAS5805)

1.特性 ● 输出配置 - 立体声 2.0: 2x25W (8Ω,21V,THD N 1%) - 立体声 2.0: 2x23W (6Ω, 18V,THD N 1%) ● 供电电压范围 - PVDD:4.5V-21V - DVDD: 1.8V 或者 3.3V ● 静态功耗 - 31.5mA at PVDD12V,BD - 18.5mA at PVDD12V,1SPW ● 音频性能指标 - Noise: ≤38uVrms - TH…

国产 BIM 软件万翼斗拱的技术突破与现实差距 —— 在创新与迭代中寻找破局之路

万翼斗拱在国产BIM领域迈出重要一步&#xff0c;凭借二三维一体化、参数化建模及AI辅助设计等功能形成差异化竞争力&#xff0c;在住宅设计场景中展现效率优势&#xff0c;但与国际主流软件相比&#xff0c;在功能完整性、性能稳定性和生态成熟度上仍有显著差距&#xff0c;需通…

企业内训系统源码开发详解:直播+录播+考试的混合式学习平台搭建

在企业数字化转型的大潮中&#xff0c;员工培训早已不再是传统教室中的一场场“走过场”&#xff0c;而是通过技术驱动的“系统化能力提升”。尤其在知识更新换代加速、竞争压力日益激烈的背景下&#xff0c;企业越来越倾向于建设自主可控、功能灵活、支持多种学习形态的内训平…

HbuilderX设置禁止import 引入模块换行

设置前效果&#xff1a; 设置&#xff1a;工具→插件配置→打开文件jsbeautifyrc.js进行配置 // 修改这个配置项 "brace_style": "collapse,preserve-inline", 配置后效果&#xff1a;

小白的进阶之路系列之七----人工智能从初步到精通pytorch自动微分优化以及载入和保存模型

本文将介绍Pytorch的以下内容 自动微分函数 优化 模型保存和载入 好了,我们首先介绍一下关于微分的内容。 在训练神经网络时,最常用的算法是反向传播算法。在该算法中,根据损失函数相对于给定参数的梯度来调整参数(模型权重)。 为了计算这些梯度,PyTorch有一个内置…

王树森推荐系统公开课 特征交叉01:Factorized Machine (FM) 因式分解机

对于FM的评价&#xff0c;引用视频底下的评论&#xff1a; FM算法在很久之前使用广泛&#xff0c;现在已逐渐淘汰。 线性模型只是加权和&#xff0c;没有考虑多个特征之间的交叉&#xff0c;在推荐系统中&#xff0c;特征交叉的作用是相当重要的。 如果 d d d 太大就不合适…

IAR无法跳转定义,IARstm8跳转显示路径出错,系统库文件文件名后有[RO]

当我们打开程序后&#xff0c;按下键盘F12无跳转或者显示路径出错 原因就是库文件是只读类型&#xff0c;在IAR里面无法跳转&#xff0c;可以看到后缀显示【RO】 解决办法就是&#xff0c;把IAR软件关闭&#xff0c;把标准库文件的只读给取消掉 重新打开IAR工程 然后修改头文件…

从零开始的云计算生活——第十一天,知识延续,程序管理。

一故事背景 今日整体内容是第十天的剩余部分再加上程序管理的开头部分&#xff0c;详细可以回到第十天看新增加内容&#xff0c;现在开始讲解新内容。 二Linux程序与进程 1程序,进程,线程的概念 程序&#xff1a;‌是一段静态的代码&#xff0c;它是应用软件执行的蓝本。程序…

STM32 单片机启动过程全解析:从上电到主函数的旅程

一、为什么要理解启动过程&#xff1f; STM32 的启动过程就像一台精密仪器的开机自检&#xff0c;它确保所有系统部件按既定方式初始化&#xff0c;才能顺利运行我们的应用代码。对初学者而言&#xff0c;理解启动过程能帮助解决常见“程序跑飞”“不进 main”“下载后无反应”…

2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组(国赛)解题报告 | 科学家

前言 题解 2022 RoboCom 世界机器人开发者大赛(睿抗 caip) -高职组&#xff08;国赛&#xff09;。 最后一题还考验能力&#xff0c;需要找到合适的剪枝。 RC-v1 智能管家 分值: 20分 签到题&#xff0c;map的简单实用 #include <bits/stdc.h>using namespace std;int…

typora插件下载链接和导入说明

1.引言 先看插件效果&#xff0c;本插件自带了历史文件tab切换、引用图片管理、思维导图、文档大纲、图排优化、文件模板、夜间模式等很多功能&#xff0c;插件的下载链接在本文最后。 2.安装插件 typora-0.9.98 之前的版本不推荐使用 插件解压为plugin文件夹&#xff0c;并移…

深化生态协同,宁盾身份域管完成与拓波软件兼容互认证

在信创产业蓬勃发展的浪潮下&#xff0c;行业生态的兼容适配决定了信创产品是否好用。近日&#xff0c;宁盾身份域管与拓波软件 TurboEX 邮件系统完成兼容互认证。测试结果显示宁盾身份域管&#xff08;信创版&#xff09;与 TurboEX 邮件服务器软件相互良好兼容&#xff0c;运…

Socket 编程 TCP

目录 1. TCP socket API 详解 1.1 socket 1.2 bind 1.3 listen 1.4 accept 1.5 read&&write 1.6 connect 1.7 recv 1.8 send 1.9 popen 1.10 fgets 2. EchoServer 3. 多线程远程命令执行 4. 引入线程池版本翻译 5. 验证TCP - windows作为client访问Linu…

SmolVLM2: The Smollest Video Model Ever(七)

编写测试代码与评价指标 现在的数据集里面只涉及tool的分类和手术phase的分类&#xff0c;所以编写的评价指标还是那些通用的&#xff0c;但是&#xff1a; predicted_labels:[The current surgical phase is CalotTriangleDissection, Grasper, Hook tool exists., The curre…

Cancer Cell丨肺癌早期干预新突破,TIM-3靶点或成关键

2025年5月8日&#xff0c;Cancer Cell 在线发表了一篇来自美国MD安德森癌症中心的研究文章Spatial and multiomics analysis of human and mouse lung adenocarcinoma precursors reveals TIM-3 as a putative target for precancer interception。作者整合了空间蛋白组、转录组…

全志V853挂载sd卡

参考文章:https://blog.csdn.net/weixin_59351001/article/details/127102440 1、插上sd卡 fdisk -l2、挂载SD卡到开发板 mount /dev/mmcblk1p1 /mnt/sdcard挂载失败(如下报错),需要格式化SD卡再进行挂载