系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[静态方法备选方案]

本文主要是介绍系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[静态方法备选方案],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

分类目录:《系统学习Python》总目录


除了将一个无self方法进行特殊标记以外,我们有时还可以用一些不同的编码结构来达到类似的结果。例如,如果我们只想要调用一个不通过实例而访问类成员的函数,可能最简单的思路就是在类之外编写一个普通函数,而不是编写类方法。通过这种方式,调用中不会期待一个实例。例如,对文件的如下修改在Python3.X和Python2.X中都有效:

class Spam:numInstances = 0def __init__(self):Spam.numInstances  = Spam.numInstances + 1def printNumInstances():print(Spam.numInstances)

输入:

a = Spam()
b = Spam()
c = Spam()printNumInstances()

输出:

3

因为类名称对简单函数而言是可读取的全局变量,这种方式可正常工作。此外,也要注意到函数名变成了全局变量,不过只针对这个模块而言;它不会和程序其他文件中的变量名冲突。

在Python中的静态方法之前,这一结构是通用的解决方案。由于Python已经把模块提供为命名空间划分工具,因此除非一个函数实现了对象的行为,否则我们总是可以认为不必把函数打包进类中。像这里这样的模块中的简单函数,实现了无实例类方法的大多数工作,并且已经与类关联起来,因为它们位于同一模块中。

遗憾的是,这种方法仍然不是理想的。其一,它给该文件的作用域添加了一个额外的名称,该名称唯一作用只是用来处理单个的类。其二,该数在代码结构上与类的联系很小;实际上,它的定义可能写在数百行代码之外的位置。可能更糟糕的是,由于它们位于类的命名空间之外的原因,像这样的简单函数不能通过继承定制,也就是说子类不能通过重新定义这样的一个函数来直接替代或扩展它。

我们也可以尝试像以往那样使用一个常规方法并总是通过一个实例调用它,从而使得这个例子以与Python版本无关的方式工作:

class Spam:numInstances = 0def __init__(self):Spam.numInstances  = Spam.numInstances + 1def printNumInstances(self):print(Spam.numInstances)

输入:

a = Spam()
b = Spam()
c = Spam()a.printNumInstances()
Spam.printNumInstances(a)
Spam().printNumInstances()

输出:

3
3
4

遗憾的是,如果我们没有一个实例可用就无法使用该方法,然而如果产生一个实例来使用该方法又会改变类的数据,就像这里的最后一行。更好的解决方案可能是在类中把一个方法标记为不需要一个实例。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.

这篇关于系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[静态方法备选方案]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/640864

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了