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

这篇具有很好参考价值的文章主要介绍了系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[使用静态方法和类方法]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

分类目录:《系统学习Python》总目录
相关文章:
· 静态方法(staticmethod)和类方法(classmethod):基础知识
· 静态方法(staticmethod)和类方法(classmethod):使用静态方法和类方法的原因
· 静态方法(staticmethod)和类方法(classmethod):初识Python中的静态方法
· 静态方法(staticmethod)和类方法(classmethod):静态方法备选方案
· 静态方法(staticmethod)和类方法(classmethod):使用静态方法和类方法
· 静态方法(staticmethod)和类方法(classmethod):用静态方法计数实例
· 静态方法(staticmethod)和类方法(classmethod):用类方法计数实例
· 静态方法(staticmethod)和类方法(classmethod):使用类方法统计每个类的实例个数实例


除了前面文章中提到的之外,目前还有另一个选择,可以编写和类相关联的、能通过类及其实例被调用的简单函数。从Python2.2起,我们可以编写带有静态方法和类方法的类,两者在调用时都不需要传人实例参数。为了指定这样的方法,类需要调用内置函数staticmethodclassmethod,就像之前的新式类讨论中提到的那样。它们都能将一个函数进行特殊标记。也就是说,静态方法不需要实例,类方法需要一个类参数。例如,下面的代码:

class Methods:
    def imeth(self, x):
        print([self, x])
        
    def smeth(s):
        print([x])
        
    def cmeth(cls, x):
        print([cls, x])
        
    smeth = staticmethod(smeth)
    cmeth = staticmethod(cmeth)

要注意程序代码中最后两个赋值语句只是重新赋值(也称为“重新绑定")了方法名称smethcmeth而已。在class语句中,属性的建立和修改通过赋值语句进行,所以这些最后的赋值语句会覆盖稍早由def所做的赋值。正如我们将在后面的文章看到的,特殊的@语法可以作为这里的一种替代,跟它与property的关系如出一辙。但是除非你理解了@语法自动化背后的这种赋值形式,否则它很难被理解。

从技术上讲,Python现在支持带有不同参数协议的三种类相关方法:

  • 实例方法:传人一个self实例对象(默认方式)
  • 静态方法:不传人额外的对象(通过staticmethod
  • 类方法:传人一个类对象(通过classmethod,并在元类中是默认的)

此外,Python3.X也允许类中的简单函数只在通过一个类对象调用的时候充当静态方法的角色,而不需要额外的协议,从而扩展了这一模式。实例方法是我们在Python类中所见的常规也是默认的情况。一定要用实例对象调用实例方法。当你通过实例调用时,Python会把实例自动传给第一位(最左侧)参数;当你通过类调用时,需要手动传入实例:

obj = Methods()
obj.imeth(1)
Methods.imeth(obj, 2)
Methods.smeth(3)
obj.smeth(4)
Methods.cmeth(5)
obj.cmeth(6)

输出:

[<__main__.Methods object at 0x000001FBF2005820>, 1]
[<__main__.Methods object at 0x000001FBF2005820>, 2]
[3]
[4]
[<class '__main__.Methods'>, 5]
[<class '__main__.Methods'>, 6]

反之,静态方法调用时不需要实例参数。与编写在类外部的简单函数不同,其函数名是相应类的作用域的局部名称,而且可以通过继承查找。无实例函数通常在Python3.X中可以通过类调用,却在Python2.X中是完全不行的。使用staticmethod内置方法还可以允许这样的方法在Python3.X中通过一个实例调用,而在Python2.X中同时可以通过类和实例调用(也就是说,前者在Python3.X中没有staticmethod也能工作,但后者不可以)·。而类方法和静态方法类似,但Python自动把类(而不是实例)传人类方法第一位(最左侧〕参数中,不管它是通过一个类或一个实例调用。

参考文献:
[1] Mark Lutz. Python学习手册[M]. 机械工业出版社, 2018.文章来源地址https://www.toymoban.com/news/detail-822283.html

到了这里,关于系统学习Python——类(class):静态方法(staticmethod)和类方法(classmethod)-[使用静态方法和类方法]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE5 C++ 静态加载资源和类

    一.上篇文章创建组件并绑定之后 在Actor中加载初始化了组件,现在在组件中赋值。使用static ConstructorHelpers::FObjectFinderTTempName(TEXT(\\\"Copy Reference\\\"));再用TempName.Object 里面的资源都来自StarterContent   效果如下: 二.静态加载类 1.在Actor中再声明一个AActor类  2.在静态加载类时使用

    2024年02月21日
    浏览(39)
  • 深入理解 python 虚拟机:描述器的王炸应用-property、staticmethod 和 classmehtod

    在本篇文章当中主要给大家介绍描述器在 python 语言当中有哪些应用,主要介绍如何使用 python 语言实现 python 内置的 proterty 、staticmethod 和 class method 。 当你在编写Python代码时,你可能会遇到一些需要通过方法来访问或设置的属性。Python中的 property 装饰器提供了一种优雅的方

    2024年02月03日
    浏览(26)
  • Python的类(Classes)——学习笔记

    When you write a class, you define the general behavior that a whole category of objects can have. 1.1 一个Class的组成部分 最直观的理解 :可以把一个class理解为一个生命体,这个生命体有一些特有的attributes(这些attributes定义了它自己)。然后这个生命体可以完成特定动作,即method。 1)特征(att

    2024年01月18日
    浏览(29)
  • python实例方法,类方法和静态方法区别

    @为python中的装饰器         实例方法时直接定义在类中的函数,不需要任何修饰。只能通过类的实例化对象来调用。不能通过类名来调用。         类方法,是类中使用@classmethod修饰的函数。类方法在定义的时候需要有表示 类对象 的参数(一般命名为cls, cls是一个类对象

    2024年02月11日
    浏览(31)
  • class_13:静态成员static关键字

         

    2024年01月20日
    浏览(37)
  • Selenium WebDriver API 中涉及的一些常用方法和类

    Selenium WebDriver API 是 Selenium 提供的一组方法和类,用于控制浏览器和操作 Web 元素。这些 API 提供了丰富的功能,包括但不限于: 1. **查找元素**:通过不同的定位方式(如ID、Class Name、XPath等)在页面中查找元素。 2. **模拟用户操作**:包括点击、输入文本、清除文本、提交表

    2024年03月15日
    浏览(34)
  • C#学习系列之密闭类、接口、结构和类

    基础学习 类似string这种不想再继续继承和修改下去,使用sealed声明。 派生类中用sealed和override,无法继续重写。 接口就是指定一组函数成员,而不实现他们的引用类型。需要使用interface来声明,同时成员默认为public,不能加任何访问修饰符。 只能用来被实现,继承接口,然

    2024年02月06日
    浏览(34)
  • Python笔记09-类属性、类方法和静态方法

    使用面相对象开发,第 1 步 是设计 类 然后使用 类名() 创建对象,创建对象 的动作有两步: 在内存中为对象 分配空间 调用初始化方法 init 为 对象初始化 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例 在程序执行时:对象各自拥有自己的 实例属性,可

    2024年01月21日
    浏览(30)
  • 三分钟学习一个python小知识2-----------我的对python的类(Class)和对象(Object)的理解

    Python是一种面向对象的编程语言,其基本的面向对象编程机制就是类(Class)和对象(Object)。 类是一种定义对象属性和方法的蓝图或模板。 它们是一种代码结构,可以包含属性存储和函数操作,从而使其更有结构和可读性。对象则是这些类的一个实例化结果,拥有类定义的

    2024年02月10日
    浏览(45)
  • Python中的静态类变量和方法

    如何在 Python 中创建静态类变量或方法? huntsbot.com聚合了超过10+全球外包任务平台的外包需求,寻找外包任务与机会变的简单与高效。 在类定义内但不在方法内声明的变量是类或静态变量: 正如@millerdev 指出的那样,这会创建一个类级 i 变量,但这与任何实例级 i 变量不同,

    2024年02月06日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包