您的位置:首页技术文章
文章详情页

浅谈python 类方法/静态方法

【字号: 日期:2022-07-10 18:25:46浏览:2作者:猪猪

1.类方法

类方法是从属于'类对象'的方法。类对象可以通过装饰器@classmethod来定义,具体格式如下:

@classmethoddef 类方法名(cls [, 形参列表]):方法体

要点如下:

@classmethod必须位于方法的上面一行 第一个参数cls(class的缩写,和前面笔记介绍的self类似),必须要有,代指'类对象'本身。 调用类方法格式:类名.类方法名(参数列表)。参数列表中不需要也不能给cls参数进行传值,解释器会自动赋值。 类方法中可以访问实例属性和实例方法会导致错误,因为有类不一定有对象。 子类继承父类方法时,传入cls是自身对象,而非父类对象。(后面的笔记会有介绍)

代码示例:

class Student: count = 0 # 类属性 '''定义方法''' @classmethod def print_count(cls): '''cls参数代表类对象''' print(Student.count)'''调用类方法'''print('调用时,不传递cls参数')Student.print_count()

运行结果:

调用时,不传递cls参数0

2.静态方法

在python中,允许定义于”类对象“无关的方法,称为'静态方法'。'静态方法'和在模块中定义的普通方法没有什么区别,只不过'静态方法'放到了'类的名字变量空间',需要通过类调用。静态方法通过装饰器@staticmethod来定义,格式如下:

@staticmethoddef 静态方法名([形参列表]):方法体

要点如下:

@staticmethod必须位于方法上面一行 调用静态方法格式:类名.静态方法名(参数列表) 静态方法中访问实例属性和实例方法会导致错误

代码示例:

class Student: count = 0 # 类属性 @staticmethod def add(a, b): '''与类无关的静态方法''' '''因为静态方法从属于类,所以是可以操作类属性和类方法''' print('{0}+{1}={2}'.format(a, b, a+b)) return a + b# 调用静态方法Student.add(20, 30)

运行结果:

20+30=50res=50

3.实例方法/类方法/静态方法的区别

class MyClass: # 类属性 class_attr = 0 def __init__(self, obj_attr): self.obj_attr = obj_attr def instance_method(self): return 'instance method called', self @classmethod def class_method(cls): return 'class method called', cls @staticmethod def static_method(): return 'static method called'print('调用实例方法')obj1 = MyClass('obj_attr1')print(obj1.instance_method())print('--' * 20)print('调用类方法')print(MyClass.class_method())print('--' * 20)print('调用静态方法')print(MyClass.static_method())

运行结果:

调用实例方法(’instance method called’, <__main__.MyClass object at 0x10ca93310>)----------------------------------------调用类方法(’class method called’, <class ’__main__.MyClass’>)----------------------------------------调用静态方法static method called

注意: 以下讨论的属性、方法均指公开的类型,非私有的。

实例方法:

能读取、修改实例属性 能调用实例方法 能读取、修改类属性 能调用类方法 能调用类静态方法 调用方式:对象名.实例方法名(参数列表),编译器自动传递self参数

类方法:

不能读取、修改实例属性 不能用实例方法 能读取、修改类属性 能调用类方法 能调用类静态方法 调用方式:类名.类方法名(参数列表),编译器自动传递cls参数

静态方法:

不能读取、修改实例属性 不能用实例方法 能读取、修改类属性 能调用类方法 能调用类静态方法 调用方式: 类名.静态方法名(参数列表),不需要cls参数 类方法和静态方法,功能非常相近,可以相互替代, 但是从规范的角度来说,请按照实例方法操作对象,类方法操作类,静态方法为和类无关的通用方法。

以上就是浅谈python 类方法/静态方法的详细内容,更多关于类方法/静态方法的资料请关注好吧啦网其它相关文章!

标签: Python 编程
相关文章: