Python类方法和静态方法:区别和使用方法
Python中的方法有两种类型:类方法和静态方法。这两种方法在使用方式、作用范围、传参方式等都存在区别,下面详细介绍这两种方法的区别和使用方法。
一、类方法
1. 定义
类方法是类对象所拥有的方法,需要使用@classmethod装饰器进行装饰,该方法的第一个参数一般为cls,表示调用该方法的类。
2. 作用
类方法通常被用于描述与类相关的行为,对类变量进行操作或返回该类的实例对象。
3. 使用方式
(1)调用类方法
类方法可以通过类对象或实例对象进行调用,传参时不需要传入self,而是传入cls。
class Foo:
num = 0
@classmethod
def class_func(cls):
cls.num += 1
print(cls.num)
foo = Foo()
Foo.class_func() # 1
foo.class_func() # 2
(2)在类方法中传参
类方法可以接受类属性或类方法作为参数,同普通方法一样,在方法中进行处理即可。
class Foo:
num = 0
def __init__(self, name):
self.name = name
@classmethod
def class_func(cls, obj):
print(obj.name)
foo = Foo("foo")
Foo.class_func(foo) # foo
4. 总结
类方法是描述类及其属性的方法,第一个参数为cls;可被类或实例对象调用;一般用于对类属性的操作,比如计数等。
二、静态方法
1. 定义
静态方法是与类无关的方法,需要使用@staticmethod装饰器进行装饰,不需要传入类或实例对象,是基于类的功能实现,但是不需要访问类或实例中的属性或方法。
2. 作用
静态方法通常被用于实现与类相关的功能,但是不需要访问类或实例中的属性或方法。
3. 使用方式
(1)调用静态方法
静态方法可以通过类对象或实例对象进行调用,传参时不需要传入self或cls。
class Foo:
@staticmethod
def static_func():
print("Hello, world!")
foo = Foo()
Foo.static_func() # Hello, world!
foo.static_func() # Hello, world!
(2)在静态方法中传参
静态方法可以接受任意参数,与函数的使用没有区别。
class Foo:
@staticmethod
def static_func(name):
print(f"Hello, {name}!")
Foo.static_func("Python") # Hello, Python!
4. 总结
静态方法是与类无关的方法,需要使用@staticmethod装饰器进行装饰;可被类或实例对象调用;一般用于实现与类相关的功能,但是不需要访问类或实例中的属性或方法。
三、函数与类方法/静态方法的区别
常见函数与类方法、静态方法的区别如下:
- 调用方式:常见函数可以通过函数名进行调用,而类方法和静态方法需要通过类对象或实例对象进行调用;
- 参数传递:常见函数的第一个参数通常是self,而类方法的第一个参数为cls,静态方法没有约束;
- 访问的对象:常见函数可以访问类和实例中的属性和方法,而类方法和静态方法没有访问实例属性的能力,只能访问类属性。
四、总结
Python中的方法分为类方法和静态方法,这两种方法在使用方式、作用范围、传参方式等都存在区别。类方法一般用于对类属性的操作,比如计数等;静态方法一般用于实现与类相关的功能,但是不需要访问类或实例中的属性或方法。在使用时,可以通过类对象或实例对象来调用这些方法。按照实际需求进行选择。
