详解python中静态方法staticmethod用法
在开发的时候, 可以使用类对方法进行封装,如果某一个方法需要访问到对象的实例属性,可以把这个方法封装成一个实例方法。如果某一个方法不需要访问对象的实例属性,但是需要访问到类的类属性,这个时候就可以考虑把这个方法封装成一个类方法。一个实例方法, 一个类方法,这是两种方法类型,但是在开发中还有一种情况,如果要封装的某一个方法,既不需要访问到对象的实例属性,也不需要访问类的类属性,这个时候就可以考虑把这个方法封装成一个静态方法。
在开发中,如果类中的某个方法既不需要访问实例属性或者调用实例方法,同时也不需要访问类属性或者调用类方法,这个时候就可以把这个方法封装成静态方法。需要在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() # 实例化调用静态方法 obj = Static() obj.test_static()
运行结果:
从上述代码和运行结果可以看出静态方法可以直接被调用,且不用加任何参数、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() # 静态方法
运行结果:
到此这篇关于详解python中静态方法staticmethod用法的文章就介绍到这了,更多相关python staticmethod内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!