Python 静态方法和类方法的区别 在Python中进行http下载 在Python中如何解析html Python 静态方法和类方法的区别 class A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): print "executing class_foo(%s,%s)"%(cls,x) @staticmethod def static_foo(x): print "executing static_foo(%s)"%x a=A() 下面是对象实例调用方法的常用方法。对象实例a隐式传递为第一个参数。 a.foo(1) # executing foo(<__main__.A object at 0xb7dbef0c>,1) 对于classmethods,对象实例的类隐式传递为第一个参数而不是self。 a.class_foo(1) # executing class_foo(<class '__main__.A'>,1) 您也可以class_foo使用该课程进行呼叫。实际上,如果您将某些东西定义为类方法,那可能是因为您打算从类而不是类实例中调用它。A.foo(1)会产生一个TypeError,但A.class_foo(1)工作得很好: A.class_foo(1) # executing class_foo(<class '__main__.A'>,1) 人们发现类方法的一个用途是创建可继承的替代构造函数。 对于staticmethods,self(对象实例)和cls(类)都不会 作为第一个参数隐式传递。它们的行为类似于普通函数,除了您可以从实例或类中调用它们: a.static_foo(1) # executing static_foo(1) A.static_foo('hi') # executing static_foo(hi) Staticmethod用于将与类有逻辑连接的函数分组到类中。 foo只是一个函数,但是当你调用时a.foo不仅仅是获取函数,你得到函数的“部分应用”版本,并将对象实例a绑定为函数的第一个参数。foo期望2个参数,而a.foo只需要1个参数。 a必然会foo。这就是下面的“绑定”一词的含义: print(a.foo) # <bound method A.foo of <__main__.A object at 0xb7d52f0c>> 用a.class_foo,a不是必然的class_foo,而是类A必然class_foo。 print(a.class_foo) # <bound method type.class_foo of <class '__main__.A'>> 在这里,使用static方法,即使它是一个方法,a.static_foo只返回一个没有参数绑定的良好'ole函数。static_foo期望1个参数,并且也 a.static_foo期望1个参数。 print(a.static_foo) # <function static_foo at 0xb7d479cc> 当然,当您static_foo与班级打电话时会发生同样的事情A。 print(A.static_foo) # <function static_foo at 0xb7d479cc> 在Python中进行http下载 在Python中如何解析html