如何区分Python中的@classmethod和@staticmethod方法?

2026-04-30 17:420阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计736个文字,预计阅读时间需要3分钟。

如何区分Python中的@classmethod和@staticmethod方法?

在Python中,经常会遇到`@classmethod`和`@staticmethod`这两个装饰器。那么,它们的区别和作用是什么呢?

`@classmethod`:- 默认有一个`cls`参数,代表类本身。- 可以使用类或对象来调用。- 通常用于需要访问或修改类变量或方法的地方。

`@staticmethod`:- 没有额外的参数。- 只能通过类来调用,不能通过对象调用。- 通常用于工具方法,不需要访问类或实例的状态。

在python类当中,经常会遇到@classmethod和@staticmethod这两个装饰器,那么到底它们的区别和作用是啥子呢?具体来看下。

  • @classmethod :默认有一个cls参数,用类或对象都可以调用。
  • @staticmethod:静态方法,无默认参数,用类和对象都可以调用。

1.@staticmethod:

我们看下代码:

class A: def f1(x): print(x) A.f1(2) # 2 类.函数

创建一个类,通过类调用函数。

class A: @staticmethod def f1(x): print(x) A.f1(2) # 2 类.静态方法 A().f1(2) # 2 对象.静态方法 这种情况下是可以执行的,如果上述f1没有被staticmethod装饰那么就会报错!!!

创建一个类,通过类调用函数。同时,因为该方法被staticmethod装饰器装饰了,那么通过对象.方法也是可以调用的。

阅读全文

本文共计736个文字,预计阅读时间需要3分钟。

如何区分Python中的@classmethod和@staticmethod方法?

在Python中,经常会遇到`@classmethod`和`@staticmethod`这两个装饰器。那么,它们的区别和作用是什么呢?

`@classmethod`:- 默认有一个`cls`参数,代表类本身。- 可以使用类或对象来调用。- 通常用于需要访问或修改类变量或方法的地方。

`@staticmethod`:- 没有额外的参数。- 只能通过类来调用,不能通过对象调用。- 通常用于工具方法,不需要访问类或实例的状态。

在python类当中,经常会遇到@classmethod和@staticmethod这两个装饰器,那么到底它们的区别和作用是啥子呢?具体来看下。

  • @classmethod :默认有一个cls参数,用类或对象都可以调用。
  • @staticmethod:静态方法,无默认参数,用类和对象都可以调用。

1.@staticmethod:

我们看下代码:

class A: def f1(x): print(x) A.f1(2) # 2 类.函数

创建一个类,通过类调用函数。

class A: @staticmethod def f1(x): print(x) A.f1(2) # 2 类.静态方法 A().f1(2) # 2 对象.静态方法 这种情况下是可以执行的,如果上述f1没有被staticmethod装饰那么就会报错!!!

创建一个类,通过类调用函数。同时,因为该方法被staticmethod装饰器装饰了,那么通过对象.方法也是可以调用的。

阅读全文