静态函数(@staticmethod): 即静态方法,静态方法是一类特殊的方法,有时候你可能需要填写一个属于这个类的方法,但是这些代码完全不会使用到实例对象本身.它主要处理这个类的逻辑关联,如验证数据;而且对参数没有要求.
类方法(@classmethod):即类方法,类方法不是绑定到对象上,而是绑定在类上的方法,它更关注于从类中调用方法,而不是从实例中调用方法,如构造重载;
成员函数:实例的方法,只能通过实例进行调用;第一个参数必须要默认传类,一般习惯用 cls.
类方法与静态方法说明
1:self 表示为类型为类的 object,而 cls 表示为类也就是 class
2:在定义普通方法的时候,需要的是参数 self, 也就是把类的实例作为参数传递给方法,如果不写 self 的时候,会发现报错 TypeError 错误,表示传递的参数多了,其实也就是调用方法的时候,将实例作为参数传递了,在使用普通方法的时候,使用的是实例来调用方法,不能使用类来调用方法,没有实例,那么方法将无法调用.
3:在定义静态方法的时候,和模块中的方法没有什么不同,最大的不同就是在于静态方法在类的命名空间之间,而且在声明静态方法的时候,使用的标记为 @staticmethod,表示为静态方法,在叼你用静态方法的时候,可以使用类名或者是实例名来进行调用,一般使用类名来调用
4:静态方法主要是用来放一些方法的,方法的逻辑属于类,但是有何类本身没有什么交互,从而形成了静态方法,主要是让静态方法放在此类的名称空间之内,从而能够更加有组织性.
5:在定义类方法的时候,传递的参数为 cls. 表示为类,此写法也可以变,但是一般写为 cls.类的方法调用可以使用类,也可以使用实例,一般情况使用的是类.
6:在重载调用父类方法的时候,最好是使用 super 来进行调用父类的方法.静态方法主要用来存放逻辑性的代码,基本在静态方法中,不会涉及到类的方法和类的参数.类方法是在传递参数的时候,传递的是类的参数,参数是必须在 cls 中进行隐身穿
7:python 中实现静态方法和类方法都是依赖 python 的修饰器来实现的.静态方法是 staticmethod,类方法是 classmethod.
静态方法,类方法的使用区别
1:类方法用在模拟 java 定义多个构造函数的情况
由于 python 类中只能有一个初始化方法,不能按照不同的情况初始化类,举例如下:
2:类中静态方法方法调用静态方法的情况
class book(object):
def __init__(self,title):
self.title = title
@classmethod
def creat(cls,title):
book = cls(title=title)
return book
book1=book("python")
book2 = book.creat("python is my work")
print(book1)
print(book2)
print(book1.title)
print(book2.title)
下面的代码,静态方法调用另一个静态方法,如果改用类方法调用静态方法,可以让 cls 代替类,(让代码看起来精简一些,也防止类名修改了,不用在类定义中修改原来的类名)
class foo(object):
x =1
u =1
@staticmethod
def average(*mixes):
return sum(mixes)/len(mixes)
@staticmethod
def static_method():
return foo.average(foo.x,foo.u)
@classmethod
def class_method(cls):
return cls.average(cls.x,cls.u)
a = foo()
print(a.static_method())
print(a.class_method())
来源: https://www.cnblogs.com/wj-1314/p/8278126.html