首页  >  问答  >  正文

Python种staticmethod和classmethod有什么区别,具体用法呢。什么时候用。

黄舟黄舟2713 天前415

全部回复(6)我来回复

  • 迷茫

    迷茫2017-04-17 16:27:00

    staticmethod并不是因为不想创建实例才声明的,而是声明该方法不会更改实例本身的数据。

    classmethod也并不是因为不想创建实例才声明的,而是为了实现对类本身的操作(传入cls之后就可以对自身的属性和方法进行操作)。

    仅仅是个人浅薄的见解,供题主参考一下。

    回复
    0
  • 迷茫

    迷茫2017-04-17 16:27:00

    一点点浅显理解
    或许有用

    浅聊Python class中的@staticmethod以及@classmethod

    回复
    0
  • 大家讲道理

    大家讲道理2017-04-17 16:27:00

    直观上看,classmethod和staticmethod的函数签名不一样,一个是有参的,一个是无参的。
    都属于python的装饰器,注意在classmethod里,参数不一定必须是cls,可以是任何命名的变量。在不涉及到父子类的时候,这2者行为看起来是一样的,但如果设计到父子类的时候,classmethod可以判断出调用的子类对象

    # -*- coding: utf-8 -*-
    
    class Parent(object):
    
        @staticmethod
        def staticSayHello():
            print "Parent static"
    
        @classmethod
        def classSayHello(anything):  #这里是anything
            if anything == Boy:
                print "Boy classSayHello"
            elif anything == Girl:
                print "girl sayHello"
    
    
    class Boy(Parent):
         pass
    
    class Girl(Parent):
        pass
    
    if __name__ == '__main__':
        Boy.classSayHello()
        Girl.classSayHello()
    

    回复
    0
  • PHP中文网

    PHP中文网2017-04-17 16:27:00

    static 和 class 还有 普通的内部方法的区别除了用法上的细微区别 主要还是考虑到代码隔离上。static 不需要任何类和实例的信息。 class 需要类的信息。 普通方法需要 instance 实例信息。不用太在意这些细节。当你不明白的时候都写成普通方法好了。当你感觉到有需要的时候你就知道改用哪个了。

    回复
    0
  • 巴扎黑

    巴扎黑2017-04-17 16:27:00

    雷雷

    回复
    0
  • 阿神

    阿神2017-04-17 16:27:00

    在一门面向对象对象语言中,static通常意味着被修饰的方法或者变量不属于实例,而是属于类。

    静态方法的作用在于:如何一个方法需要在不构造实例的情况下调用,那么这个方法就需要被定义成静态。静态方法不能被override,也不具备大部分OO特性,静态方法实际上存在过程式语言的思想。

    根据自己写Python代码的经验,面向对象在Python中用起来有点生硬,比如static方法和函数不知道选择谁。所以,建议专注学习Python自己独特的特性,而不是OO。

    回复
    0
  • 取消回复