欢迎访问宙启技术站
智能推送

Python类方法和静态方法:区别和使用方法

发布时间:2023-06-11 03:24:48

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中的方法分为类方法和静态方法,这两种方法在使用方式、作用范围、传参方式等都存在区别。类方法一般用于对类属性的操作,比如计数等;静态方法一般用于实现与类相关的功能,但是不需要访问类或实例中的属性或方法。在使用时,可以通过类对象或实例对象来调用这些方法。按照实际需求进行选择。