python中静态方法staticmethod用法详解

本文详细介绍了Python中类的三种方法类型:实例方法、类方法和静态方法。实例方法访问实例属性,类方法访问类属性,静态方法不依赖于实例或类属性。静态方法通过@staticmethod装饰器定义,可以直接通过类或实例调用,常用于归类不依赖对象状态的函数。文中通过示例代码展示了三种方法的使用和调用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        在开发的时候, 可以使用类对方法进行封装,如果某一个方法需要访问到对象的实例属性,可以把这个方法封装成一个实例方法。如果某一个方法不需要访问对象的实例属性,但是需要访问到类的类属性,这个时候就可以考虑把这个方法封装成一个类方法。一个实例方法, 一个类方法,这是两种方法类型,但是在开发中还有一种情况,如果要封装的某一个方法,既不需要访问到对象的实例属性,也不需要访问类的类属性,这个时候就可以考虑把这个方法封装成一个静态方法。

        在开发中,如果类中的某个方法既不需要访问实例属性或者调用实例方法,同时也不需要访问类属性或者调用类方法,这个时候就可以把这个方法封装成静态方法。需要在def关键字上方增加一个静态方法的修饰符,@staticmethod。

语法格式如下:

@staticmethod
def 静态方法名():
    pass

        在Python里面静态方法和我们平时写的函数def是一样的。唯一不同之处就是它可以存在于类中,不同实例化类也可以调用。

        需要通过装饰器 @staticmethod 来进⾏修饰, 静态⽅法既不需要传递类对象也不需要传递实例对象(形参没有self/cls ) 。

        静态⽅法 也能够通过 实例对象 和 类对象 去访问。

        当⽅法中 既不需要使⽤实例对象 ( 如实例对象,实例属性 ) , 也不需要使⽤类对象 ( 如类属性、类⽅法、创建实例等) 时,定义静态⽅法

        取消不需要的参数传递 ,有利于 减少不必要的内存占⽤和性能消耗。

 示例代码:

class Dog(object):
    @staticmethod
    def info_print():
        print('这是⼀个狗类,⽤于创建狗实例....')


wangcai = Dog()
# 静态⽅法既可以使⽤对象访问⼜可以使⽤类访问
wangcai.info_print()
Dog.info_print()

运行结果:

在类中编写静态方法和类的普通方法

class Static(object):
    @staticmethod
    def test_static():
        print('I am staticmethod')

    def test_def(self):
        print('I am not staticmethod')


#  调用静态方法
Static.test_static()
Static.test_def(1)  # 需要一个占位符

#  实例化调用静态方法
obj = Static()
obj.test_static()
obj.test_def()

运行结果:

        从上述代码和运行结果可以看出静态方法可以直接被调用,且不用加任何参数、self也不要。静态方法存在的意义其实就是让函数归类,紧耦合。

在类对象中定义的静态方法:

class MyClass(object):
    # 在类对象中定义的静态方法
    @staticmethod
    def tom(age, weight):  # 没有 self
        print(age, weight)

    @classmethod
    def get_info(cls):
        # 通过类对象调用类方法
        MyClass.tom(25, 66)

    def my_info(self):
        # 通过实例对象调用静态方法
        self.tom(26, 77)


# 通过类对象调用静态方法
MyClass.tom(23, 55)  # 23 55

# 实例化
mc = MyClass()

# 通过实例对象调用静态方法
mc.tom(24, 65)  # 24 65

# 通过类对象调用类方法
mc.get_info()  # 25 66

mc.my_info()  # 26 77

运行结果:

 实例方法、类方法、静态方法综合例子

class MyClass(object):
    def __init__(self, name):
        self.name = name

    def get_info(self):  # 定义实例方法,有 self 参数
        print("实例方法")

    @classmethod
    def get_other(cls):  # 定义实例方法,有 cls 参数
        print("类方法")

    @staticmethod
    def get_my_class():  # 定义静态方法,无默认参数
        print("静态方法")


# 实例化
mc = MyClass("tom")

# 调用实例方法
mc.get_info()  # 实例方法

# 调用类方法,建议通过 类对象.类方法([实参]) 方法调用
MyClass.get_other()  # 类方法

# 调用静态方法,建议通过 类对象.类方法([实参]) 方法调用
MyClass.get_my_class()  # 静态方法

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值