-
method
- 通过实例调用
- 可以引用类内部的任何属性和方法
-
classmethod
- 无需实例化
- 可以调用类属性和类方法
- 无法取到普通的成员属性和方法
-
staticmethod
- 无需实例化
- 无法取到类内部的任何属性和方法, 完全独立的一个方法
-
练习: 说出下面代码的运行结果
-
class Test(object): x = 123 def __init__(self): self.y = 456 def bar1(self): print('i am a method') @classmethod def bar2(cls): print('i am a classmethod') @staticmethod def bar3(): print('i am a staticmethod') def foo1(self): print(self.x) print(self.y) self.bar1() self.bar2() self.bar3() @classmethod def foo2(cls): print(cls.x) print(cls.y) cls.bar1() cls.bar2() cls.bar3() @staticmethod def foo3(obj): print(obj.x) print(obj.y) obj.bar1() obj.bar2() obj.bar3() t = Test() t.foo1() t.foo2() t.foo3()