python @classmethod 和staticmethod
时间: 2023-09-11 21:12:40 浏览: 147
对Python中的@classmethod用法详解
5星 · 资源好评率100%
`@classmethod` 和 `@staticmethod` 是 Python 中用来定义类方法和静态方法的装饰器。
`@classmethod` 装饰器用于定义类方法。类方法是绑定到类而不是实例的方法,可以通过类或实例调用。类方法的第一个参数通常被约定为 `cls`,表示类本身,而不是实例。类方法可以访问类的属性和调用其他类方法。
示例:
```python
class MyClass:
@classmethod
def my_class_method(cls, arg1, arg2):
# 类方法可以访问类的属性
print(cls.__name__)
print(arg1, arg2)
# 通过类调用类方法
MyClass.my_class_method('hello', 'world')
# 输出:
# MyClass
# hello world
# 也可以通过实例调用类方法
obj = MyClass()
obj.my_class_method('hello', 'world')
# 输出:
# MyClass
# hello world
```
`@staticmethod` 装饰器用于定义静态方法。静态方法不需要访问实例或类的状态,因此不需要传递 `self` 或 `cls` 参数。静态方法可以通过类或实例直接调用。
示例:
```python
class MyClass:
@staticmethod
def my_static_method(arg1, arg2):
print(arg1, arg2)
# 通过类调用静态方法
MyClass.my_static_method('hello', 'world')
# 输出:
# hello world
# 也可以通过实例调用静态方法
obj = MyClass()
obj.my_static_method('hello', 'world')
# 输出:
# hello world
```
总结:
- `@classmethod` 用于定义类方法,第一个参数为类本身,可以访问类的属性和调用其他类方法。
- `@staticmethod` 用于定义静态方法,不需要访问实例或类的状态,可以通过类或实例直接调用。
阅读全文