资讯专栏INFORMATION COLUMN

Python类方法与静态方法之间的区别

89542767 / 487人阅读


  小编写这篇文章的主要目的,是讲述一下关于Python的一些小技巧,包括类方法与静态方法之间,存在一些什么区别呢?怎么从真正的意义上去理解关于其不同之间的区别呢?下面就给大家详细的解答下。


  前言


  在python的类中不仅可以有methods,还可以有变量,这些变量称为类属性,例如如下代码中Book类的TYPES即为类属性。


  类中的方法分为3类:


  1.实例方法instance method


  不使用装饰器


  类中的所有方法,如果第一个参数是self,就是instance method,self是创建的类实例,实例方法与实例即对象相关。


  (self可以改成别的名称,但使用self是convention,self是类实例,),


  2.类方法class method


  使用classmethod装饰


  类方法的第一个参数总是cls。如果方法需要类的信息,用classmethod对其进行装饰,类方法经常被用作factory,例如如下代码中的hardcover和paperback两个class method方法就是可用于创建对象的factory。


  (cls可以改成别的名称,但使用cls是convention)


  3.静态方法static method


  使用staticmethod装饰


  静态方法并不是真正意义上的类方法,它只是一个被放到类里的函数而已。


  尽管如此,仍然称之为方法,但它没有关于class或object的任何信息,所以它实际上是一个独立的函数,只是被放到了类里,静态方法既没有self也没有cls参数。(静态方法可以访问类属性,例如Book.TYPES)


  静态方法通常用于组织代码,例如如果认为将某个函数放到某个类里,整体代码会因此更符合逻辑,于是可以将这个函数变成该类的静态方法。所以如果需要在类里放一个函数进去,此函数不会用到任何关于类或实例的信息,那么就可以用staticmethod对其进行装饰。


  三种方法中,实例方法和类方法用得最多,静态方法不常用。


  class Book:
  TYPES=("hardcover","paperback")#精装,平装
  def __init__(self,name,book_type,weight):
  self.name=name
  self.book_type=book_type
  self.weight=weight
  def __repr__(self):
  return f"<Book{self.name},{self.book_type},weighing{self.weight}g>"
  def instance_method(self):
  print(f"Called instance method of{self}")
  classmethod
  def class_method(cls):
  print(f"called class method of{cls}")
  classmethod
  def hardcover(cls,name,paper_weight):#cls名称任意,使用cls是convention
  #下一行的cls,改成Book,代码也能跑,但应该写成cls,以避免在inheritance可能会遇到的问题
  return cls(name,cls.TYPES[0],paper_weight+100)#
  classmethod
  def paperback(cls,name,paper_weight):
  #下一行的cls,改成Book,代码也能跑,但应该写成cls,以避免在inheritance可能会遇到的问题
  return cls(name,cls.TYPES[1],paper_weight)
  staticmethod
  def static_method():
  print("Called static method")
  book=Book("Dive into Python",Book.TYPES[1],800)
  #Called instance method of<Book Dive into Python,paperback,weighing 800g>
  book.instance_method()
  #下一行代码和上一行完全等价
  #Called instance method of<Book Dive into Python,paperback,weighing 800g>
  Book.instance_method(book)
  #called class method of<class'__main__.Book'>
  Book.class_method()
  #Called static method
  Book.static_method()
  h_book=Book.hardcover("Harry Potter",1500)
  light=Book.paperback("Python 101",600)
  #<Book Harry Potter,hardcover,weighing 1600g>
  print(h_book)
  #<Book Python 101,paperback,weighing 600g>
  print(light)

  综上所述,关于Python中类方法与静态方法之间的区别,就为大家介绍到这里了,希望可以给大家带来更多的帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128020.html

相关文章

  • python设计模式-UML图中结构及python实现

    摘要:前言最近在看设计模式。类抽象类中接口图示接口在中的图形为可以看到再其上半部分有一个的表示。代码在中本事是没有接口和抽象类这一概念的,但是可以通过这个库来实现。在代码中的结构就是继承非抽象类。箭头指向抽象类。 前言 最近在看设计模式。在学习初期一直有一个问题困扰着我,那就是UML类图 中的各种结构用python代码是如何实现的?这个在初期可以说是深深的困扰着我的设计模式 学习之路。下...

    shadajin 评论0 收藏0
  • Python基础题目大全,测试你水平,巩固知识(含答案)

    摘要:里,有两种方法获得一定范围内的数字返回一个列表,还有返回一个迭代器。在引用计数的基础上,还可以通过标记清除解决容器对象可能产生的循环引用的问题。列举常见的内置函数的作用,过滤函数,循环函数累积函数一行代码实现乘法表。 showImg(https://segmentfault.com/img/remote/1460000019294205); 1、为什么学习Python? 人生苦短?人间...

    huhud 评论0 收藏0
  • [译] 属性访问、特性和描述符 2

    摘要:不像其他属性,描述符在类级别上创建。当所有者类被定义时,每个描述符对象都是被绑定到一个不同的类级别属性的描述符类实例。这必须返回描述符的值。此外,描述符对有一个方便的响应和请求格式。 注:原书作者 Steven F. Lott,原书名为 Mastering Object-oriented Python __getattribute__()方法 __getattribute__()方法是...

    CloudwiseAPM 评论0 收藏0
  • 从能做什么到如何去做,一文带你快速掌握Python编程基础实战

    摘要:本文的分享主要围绕以下几个方面能做什么常见应用场景介绍如何学习语法基础实战面向对象编程实战练熟基础小游戏项目的实现与实战一能做什么一种编程语言往往可以应用于多方面,有些方面比较常用,有些方面极为常用。比如表示是一个空列表。 摘要:Python语言的教程虽然随处可见,但是忙于日常业务/学习的你或许:一直想要找个时间学一点,但是又不知道该从何下手?本文将从Python能做什么,如何学习Py...

    BLUE 评论0 收藏0
  • python:面向对象基本知识

    摘要:面向对象类是现实世界或思维世界的实体在计算机中的反映它将数据以及这些数据上的操作封装在一起属性特征方法函数行为构造函数初始化类的特征构造函数是自动被调用的,也可显式调用,但不能定义值,只能返回一般不用作用初始化类的特征值,让对象之间变 面向对象: #类是现实世界或思维世界的实体在计算机中的反映 #它将数据以及这些数据上的操作封装在一起 # 属性-特征 # 方法(函数)-行...

    Yang_River 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<