静态方法、类方法和成员方法有什么区别 ------------------------------------------ 静态方法和类方法功能接近,类方法是加上一个cls作为类的引用,这样可以通过cls来访问类的变量, 也可以作为类名来调用其构造函数,他们均不能访问类的实例中的变量。 * 静态方法,主要处理与这个类的逻辑关联,和c++中的静态方法相似。 * 类方法(@classmethod), 关注于从类中调用方法, 而不是在实例中调用方法, 定义时需要传递cls; 例如下面定义静态方法和类方法::: class C: @staticmethod def f(arg1, arg2, ...): ... @classmethod def f(cls, arg1, arg2, ...): ... * 成员函数: 实例的方法, 只能通过实例进行调用; 例如::: class Book: version = "1.0" def __init__(self, name): self.name = name def fn1(self): print("call fn1 %s %s" % (Book.version, self.name)); #仅在Book名字空间之下 def fn2(): print("call fn2 %s" % Book.version); @staticmethod def fn3(): print("call fn3 static method %s" % Book.version); @classmethod def fn4(cls): print("call fn4 class method %s %s" % (Book.version, cls.version)); #Book.fn1() #成员函数在没有对象时不能调用 Book.fn2() Book.fn3() Book.fn4() book = Book("openwrt") book.fn1() #book.fn2() #传递了对象,但实际上函数不需要Book对象 book.fn3() book.fn4() fn2,fn3,fn4均不能访问实例中的变量name, 均可以通过Book.version来访问version变量。 类方法可以方便的通过cls来引用类对象中的变量。