一、浅谈Java和Python中的静态方法和类方法
Python中提供了两种方法装饰器,@classmethod和@staticmethod。classmethod被称为“类方法”,而staticmethod被称为“静态方法”。被这两个装饰器装饰的方法,不需要对实例进行初始化就可以直接调用:
class Demo:
@classmethod
def Klassmeth(*args):
pass
@staticmethod
def statmeth(*args):
pass
Demo.klassmeth()
Demo.statmeth()
classmethod通常是用于定于备选构造方法。对于Python来说,虽然经常把__init__方法认为是构造方法,但真正创建对象的方法是__new__,对象创建完成以后会把参数传递给__init__方法。当一个__init__方法不够用的时候(即想要通过一个类完成多个不同实例的创建),往往会使用到classmethod,比如:
class Draw:
def __init__(self, x, y):
self.x = x
self.y = y
@classmethod
def draw(cls, position):
return cls(*position)
draw = Draw(x, y)
draw2 = Draw.draw((x, y))
这样,无论传入的参数是x和y的各自的数值还是一个包含坐标值的tuple,Draw都可以创建相应的实例。在Java中似乎并不需要这么做,因为Java可以具有多个构造方法:
public class Draw{
Draw(int x, int y){
this.x = x;
this.y = y;
}
Draw(int[] position){
this.x = position[0];
this.y = position