前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实例方法,类方法和静态方法的区别_python中类的所有实例方法

实例方法,类方法和静态方法的区别_python中类的所有实例方法

作者头像
全栈程序员站长
发布2022-09-20 08:38:04
2K0
发布2022-09-20 08:38:04
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

实例方法

第一个参数是”self”,表示实例对象,通过它传递实例的属性和方法。只能由实例调用

类方法

使用装饰器@classmethod,第一个参数可以是”cls”,也可以是”self”,通过它传递类的属性和方法。可以由类和实例调用

假设我有一个学生类和一个班级类,想要实现的功能为:班级类含有类方法:执行班级人数增加的操作、获得班级的总人数,学生类继承自班级类,每实例化一个学生,班级人数都能增加。最后,我想定义一些学生,然后获得班级中的总人数 这个问题用类方法做比较合适,因为我实例化的时学生,但是如果我从学生这一个实例中获得班级总人数是不合理的,同时,如果想要获得班级总人数,如果生成一个班级的实例也是没有必要的

代码语言:javascript
复制
class ClassTest(object):

    __num = 0

    @classmethod
    def addNum(cls):
        cls.__num += 1

    @classmethod
    def getNum(cls):
        return cls.__num

    def __new__(self):
        ClassTest.addNum()
        return object.__new__(self)


class Student(ClassTest):
    def __init__(self):
        self.name = ""

a = Student()
b = Student()
print(ClassTest.getNum())

静态方法

使用装饰器 @staticmethod,不需要实例。静态方法主要用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有交互,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。可以理解为,静态方法是独立的,单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。可以由类和实例调用 例如,定义一个关于时间操作的类,其中有一个获得当前时间的函数

代码语言:javascript
复制
import time

class TimeTest(object):

    def __init__(self, hour, minute, second):
        self.hour = hour
        self.minute = minute
        self.second = second

    @staticmethod
    def showTime():
        return time.strftime("%H:%M:%S", time.localtime())


print(TimeTest.showTime())
t = TimeTest(2, 10, 10)
nowTime = t.showTime()
print(nowTime)

使用静态函数,既可以将获得时间的函数功能与实例解绑,我想获得当前时间的字符串时,并不一定需要实例化对象,此时更像是一种名称空间。我们可以在类外面写一个简单的方法来做这些,但是这样做就扩散了类代码的关系到类定义的外面,这样写就会导致以后代码维护的困难

参考文章

《python中的静态方法和类方法》 《python中类方法,实例方法,静态方法的作用和区别》

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/167580.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实例方法
  • 类方法
  • 静态方法
  • 参考文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档