python两大编程思想,类和对象,实例变量类变量,静态方法与实例方法和类方法,给对象动态绑定属性和函数

news2024/10/16 14:54:44

1.两大编程思想

面向对象(python和java)和面向过程(c语言)编程思想的区别

在这里插入图片描述

2.类和对象

1.类是抽出对象中的相似属性和行为得到的类别

python中一切皆对象

在这里插入图片描述

对于字符串,整数等等都是类型class

可以自定义class,需要注意类型名称首字母大写

2.创建类,创建对象结构:
在这里插入图片描述
类的组成:
在这里插入图片描述
实例属性和实例方法的调用需要用对象名.来调用,其他和实例无关的类的相关组成通过类名来调用

  • 类属性
    类属性是定义在类命名空间中的变量,它被类的所有实例共享。这意味着,无论你创建了多少个类的实例,它们访问的都是同一个类属性。类属性通常用于那些与类本身紧密相关,但与类的具体实例无关的数据。
  • 实例属性 实例属性是定义在实例命名空间中的变量,每个实例都有自己独立的实例属性,互不干扰。实例属性通常用于存储与类的特定实例相关的数据。
  • 定义实例属性
    实例属性通常在类的__init__方法中定义,使用self作为前缀。
class MyClass:  
    # 类属性  
    class_attribute = "这是一个类属性"  
  
    def __init__(self, instance_attribute):  #实例方法
        # 实例属性  
        self.instance_attribute = instance_attribute  
  
# 访问类属性  
print(MyClass.class_attribute)  # 输出: 这是一个类属性  
  
# 修改类属性(会影响所有实例)  
MyClass.class_attribute = "类属性已修改"  
print(MyClass.class_attribute)  # 输出: 类属性已修改 

# 创建实例  
instance1 = MyClass("实例属性1")  
instance2 = MyClass("实例属性2")  
  
# 访问实例属性  
print(instance1.instance_attribute)  # 输出: 实例属性1  
print(instance2.instance_attribute)  # 输出: 实例属性2  
  
# 修改实例属性(不会影响其他实例)  
instance1.instance_attribute = "实例属性1已修改"  
print(instance1.instance_attribute)  # 输出: 实例属性1已修改  
print(instance2.instance_attribute)  # 输出: 实例属性2(未变)

总结
类属性:定义在类命名空间中,被类的所有实例共享
实例属性:定义在实例命名空间中,每个实例都有自己独立的实例属性

  • 实例方法

实例方法通过在类定义中直接编写函数来定义,但该函数至少接受一个名为self的参数(虽然在调用实例方法时不需要显式传递self参数,Python会自动处理)。

在下边这个例子中,__init__方法是一个特殊的实例方法,用于初始化新创建的实例。它自动接受self作为第一个参数,尽管在创建实例时不需要显式传递它。

class MyClass:  
    def __init__(self, value):  
        self.value = value  
  
    def print_value(self):  
        # 访问实例属性  
        print(self.value)  
  
    def modify_value(self, new_value):  
        # 修改实例属性  
        self.value = new_value  
  
# 创建实例  
instance = MyClass(5)  
  
# 调用实例方法  
instance.print_value()  # 输出: 5  
instance.modify_value(10)  
instance.print_value()  # 输出: 10
  • 静态方法

在Python中,静态方法(Static Methods)是定义在类中的函数,但它既不接受类隐式的第一个参数(cls对于类方法而言),也不接受实例隐式的第一个参数(self对于实例方法而言)。静态方法实际上与普通函数的行为相似,但它们在类的命名空间中定义,这意味着你可以通过类来引用它们,而不是必须定义在全局作用域中。

静态方法主要用于那些逻辑上属于类的范畴,但实际上既不需要访问类属性也不需要访问实例属性的函数。

静态方法通过@staticmethod装饰器来定义。

class MyClass:  
    @staticmethod  
    def my_static_method(arg1, arg2):  
        # 注意:没有self或cls参数  
        print(f"Static method called with arguments: {arg1}, {arg2}")  
  
# 调用静态方法  
MyClass.my_static_method(1, 2)  # 通过类名调用  
  
# 也可以通过实例调用,但这样做通常不是必需的  
instance = MyClass()  
instance.my_static_method(3, 4)  # 通过实例调用

使用场景:

静态方法的一个常见用途是实现工具函数,这些函数虽然与类紧密相关,但不需要访问类的任何属性。例如,你可能有一个表示几何形状的类,该类有一个静态方法来计算给定类型的形状是否可以被另一个形状完全包含(如一个圆是否完全位于另一个圆内)。这样的计算不需要访问任何实例或类属性,因此将其实现为静态方法是合适的。

  • 类方法

在Python中,类方法(Class Methods)是绑定到类而不是类的实例的方法。它们至少接受一个参数,按照惯例,这个参数被命名为cls,它是对类本身的引用,而不是类的实例。类方法通过@classmethod装饰器来定义。

**类方法通常用于实现那些需要访问类属性或执行与类本身相关的操作,但不需要访问或修改实例属性的功能。**一个常见用途是实现工厂方法模式,即类方法根据输入参数返回类的不同实例。另一个用途是修改或访问类级别的状态。

class MyClass:  
    counter = 0  # 类属性  
  
    @classmethod  
    def get_counter(cls):  
        # 注意:这里使用cls而不是self  
        return cls.counter  

静态方法与实例方法和类方法的区别
实例方法:接受一个隐式的self参数,通过该参数可以访问类的实例属性和其他实例方法。
类方法:接受一个隐式的cls参数,代表类本身,通过它可以访问类属性,但不能直接访问实例属性(因为没有self参数指向具体的实例)。
静态方法:不接受隐式的self或cls参数,它更像是一个放在类命名空间中的普通函数。

给对象动态绑定属性和函数

在对象创建后再写入
动态函数写好后赋值给对象,需要注意不要加()错写成调用。
在这里插入图片描述

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

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

相关文章

海康相机二次开发学习笔记2-方案的相关操作

方案和流程是VisionMaster(简称VM)的主要概念,一个方案可以包含多个流程,一个流程可以由多个模块通过连线建立逻辑关系. 方案的相关操作 1. 界面设计 界面分为三个部分:流程显示区,方案操作区,消息显示区.添加GroupBox,文本框,文本,和一些按钮. 2. 流程显示区 为了将方案加…

基于Spring Boot的可盈保险合同管理系统的设计与实现

TOC springboot146基于Spring Boot的可盈保险合同管理系统的设计与实现 绪论** 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关…

论文复现_从 CONAN 中收集 TPL 数据集

1. 概述 CONAN:Conan是一个用于C项目的开源包管理工具。 它的主要目标是简化C项目的依赖关系管理过程,使开发人员能够更轻松地集成、构建和分享C库。 其中有一些比较独特的功能,例如:版本管理、第三方库管理等。 TPL 数据集&…

2.1 MySQL概述

欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

多媒体技术及应用课程思政网站

摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括多媒体技术及应用课程思政网站的网络应用,在外国多媒体技术及应用课程思政已经是很普遍的方式,不过国内的多媒体技术及应用课程思政可能还处于起…

【MIT-BEVFusion代码解读】第二篇:LiDAR的encoder部分

文章目录 1. Voxelization2. backbone2.1 稀疏卷积介绍2.2 SparseEncoder(1)输入输出及参数说明(2)流程 BEVFusion相关的其它文章链接: 【论文阅读】ICRA 2023|BEVFusion:Multi-Task Multi-Sensor Fusion w…

VPN远程同时连接:IPsec站点到站点方式及L2TPoverIPsecVPN方式

一、实验目的及拓扑 实验目的:企业总部与分支通过IPsecVPN建立点对点连接,移动端通过L2TP方式与企业总部连接 二、基本配置 1、如图所示配置接口地址 2、总部接口区域配置 [FW1]dis zone local priority is 100 interface of the zone is (0): # …

【数值计算方法】常微分方程初值问题的数值解法

常微分方程初边值问题数值解 第九章 1. 引言 微分方程 :含有未知函数及其导数或微分的等式; 除了少数特殊类型的微分方程能用解析方法求得精确解外 , 多数情况找不到解的解析表达式 本章研究两类常微分问题: 一阶常微分方程的初值问题 ; 两阶常微分方程边值问题 一…

C#小结:如何在VS2022中使用菜单栏中的Git管理代码

目录 第一部分:基础操作 第一步,登录官网,设置好邮箱,然后右上角新建仓库 第二步,提交代码到远程仓库中 第三步,查看和比对自己修改的内容 第四步,查看该项目所有提交历史记录 第五步&…

LAMM: Label Alignment for Multi-Modal Prompt Learning

系列论文研读目录 文章目录 系列论文研读目录文章题目含义AbstractIntroductionRelated WorkVision Language ModelsPrompt Learning MethodologyPreliminaries of CLIPLabel AlignmentHierarchical Loss 分层损失Parameter Space 参数空间Feature Space 特征空间Logits Space …

CSP-CCF 202009-1 检测点查询

一、问题描述 二、解答 提醒:本题不宜开方,距离间的比较用平方来比较更好 思路:使用三次for循环,逐一找到最小、第二小、第三小 注:这里用到了limits.h头文件,里面包含了int的最大值INT_MAX #include&l…

搭建企业博客:塑造品牌可信度与优化SEO的利器

引言 在数字化时代,信息的传播速度超乎想象,企业如何在这个信息爆炸的环境中脱颖而出,成为连接消费者、塑造品牌形象的关键。企业博客,作为一种低成本、高效率的营销与沟通工具,正逐渐成为企业策略中不可或缺的一环。…

阅读台灯什么品牌好?不良商家最常用的四大阅读台灯套路,需警惕

阅读台灯什么品牌好?市场上的护眼台灯种类繁多,众多选择中不乏以低价吸引消费者的产品,这也导致了部分家长对于护眼台灯的价值产生了质疑,认为它们不过是不必要的开销。确实,一些低质的护眼灯不仅使用了劣质材料&#…

利用minikube部署k8s集群并部署lnmp服务

部署minikube 参考官网进行安装部署 利用minikube部署k8s集群 1. 部署k8s集群 minikube start k8s集群部署lnmp 1. 将如下内容存储为lnmp.yaml文件 --- apiVersion: v1 kind: Namespace metadata: name: lnmp --- apiVersion: v1 kind: PersistentVolumeClaim metadata: na…

请注意,这是第一届程序化售卖广告的奥运会

作者:刀客doc 巴黎奥运会收官了。很多人在谈郑钦文的商业价值、哪个品牌押中了奥运冠军时,却忽略了一个新闻: 这是第一届程序化售卖广告的奥运会:NBC环球通过旗下的流媒体平台 Peacock,以程序化方式销售巴黎奥运会期…

基于java的私人牙科诊所管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于java的私人牙科诊所管理系统,java项…

文心一言 VS 讯飞星火 VS chatgpt (325)-- 算法导论22.5 1题

一、如果在图G中加入一条新的边,G中的强连通分量的数量会发生怎样的变化?如果要写代码,请用go语言。 文心一言: 在图G中加入一条新的边,其对强连通分量(Strongly Connected Components, SCCs)…

海量数据处理商用短链接生成器平台 - 1

第一章 海量数据处理商用短链接生成器平台介绍 第1集 什么是短链接生成器 短链接生成器是一种工具,可以将较长的链接转换成较短的链接。这种工具在许多场景中都很有用,包括营销、社交媒体分享和数据报告等。以下是一些关于短链接生成器的优点和作用&…

VS实用调试技巧(程序员的必备技能)

调试的重要性 在我们写代码的时候,如果程序出现了bug,那么下一步就是找到bug并修复bug!而这个找问题的过程就被称为调试(英文叫debug,消灭bug的意思)。 调试能观察到程序内部执行的细节,可以增加程序员对…

5大低代码开源平台案例研究

在当今快速发展的数字化时代,企业面临着越来越复杂的技术挑战和市场竞争。为了保持竞争力并加速业务创新,许多公司正在转向低代码开源平台。然而,选择合适的低代码平台并将其成功实施,依然是一个挑战。 本文将深入探讨五个成功案…