84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
人生最曼妙的风景,竟是内心的淡定与从容!
staticmethod并不是因为不想创建实例才声明的,而是声明该方法不会更改实例本身的数据。
classmethod也并不是因为不想创建实例才声明的,而是为了实现对类本身的操作(传入cls之后就可以对自身的属性和方法进行操作)。
仅仅是个人浅薄的见解,供题主参考一下。
一点点浅显理解或许有用
浅聊Python class中的@staticmethod以及@classmethod
直观上看,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()
static 和 class 还有 普通的内部方法的区别除了用法上的细微区别 主要还是考虑到代码隔离上。static 不需要任何类和实例的信息。 class 需要类的信息。 普通方法需要 instance 实例信息。不用太在意这些细节。当你不明白的时候都写成普通方法好了。当你感觉到有需要的时候你就知道改用哪个了。
雷雷
在一门面向对象对象语言中,static通常意味着被修饰的方法或者变量不属于实例,而是属于类。
static
静态方法的作用在于:如何一个方法需要在不构造实例的情况下调用,那么这个方法就需要被定义成静态。静态方法不能被override,也不具备大部分OO特性,静态方法实际上存在过程式语言的思想。
override
根据自己写Python代码的经验,面向对象在Python中用起来有点生硬,比如static方法和函数不知道选择谁。所以,建议专注学习Python自己独特的特性,而不是OO。
staticmethod并不是因为不想创建实例才声明的,而是声明该方法不会更改实例本身的数据。
classmethod也并不是因为不想创建实例才声明的,而是为了实现对类本身的操作(传入cls之后就可以对自身的属性和方法进行操作)。
仅仅是个人浅薄的见解,供题主参考一下。
一点点浅显理解
或许有用
浅聊Python class中的@staticmethod以及@classmethod
直观上看,classmethod和staticmethod的函数签名不一样,一个是有参的,一个是无参的。
都属于python的装饰器,注意在classmethod里,参数不一定必须是cls,可以是任何命名的变量。在不涉及到父子类的时候,这2者行为看起来是一样的,但如果设计到父子类的时候,classmethod可以判断出调用的子类对象
static 和 class 还有 普通的内部方法的区别除了用法上的细微区别 主要还是考虑到代码隔离上。static 不需要任何类和实例的信息。 class 需要类的信息。 普通方法需要 instance 实例信息。不用太在意这些细节。当你不明白的时候都写成普通方法好了。当你感觉到有需要的时候你就知道改用哪个了。
雷雷
在一门面向对象对象语言中,
static
通常意味着被修饰的方法或者变量不属于实例,而是属于类。静态方法的作用在于:如何一个方法需要在不构造实例的情况下调用,那么这个方法就需要被定义成静态。静态方法不能被
override
,也不具备大部分OO特性,静态方法实际上存在过程式语言的思想。根据自己写Python代码的经验,面向对象在Python中用起来有点生硬,比如static方法和函数不知道选择谁。所以,建议专注学习Python自己独特的特性,而不是OO。