注: Python2.7 が使用されます。
1. インスタンスメソッド
インスタンス メソッドは、クラスのインスタンスによって使用できるメソッドです。次のように:
if __name__ == '__main__':
foo01 = Foo('letian')
foo01.hi()
print type(Foo)
print type(foo01)
print id(foo01)
print id(Foo)
。
静的メソッドは、クラス定義の名前空間にある通常の関数であり、どのインスタンス型でも動作しません。静的メソッドを定義するには、デコレータ @staticmethod を使用します。クラス オブジェクトとインスタンスの両方で静的メソッドを呼び出すことができます:
foo01.hi()
foo01.add(1,2)
Foo.add(1, 2)
クラスメソッドは、クラス自体をオブジェクトとして操作するメソッドです。クラス メソッドは @classmethod デコレータを使用して定義され、その最初のパラメータはクラスであり、規則は cls として記述されます。クラス オブジェクトとインスタンスの両方でクラス メソッドを呼び出すことができます:
foo01.hi(2)
Foo.hi(3)
実行結果は次のとおりです。
super は、親クラスで関数を実行するために使用されます。例:
super(Foo2, self).hi()
if __name__ == '__main__':
foo2.hi()
実行結果:
class Foo2(Foo):
def hi(self):
super(Foo2, self).hi()
if __name__ == '__main__':
foo2 = Foo2()
foo2.hi()
五、类变量和实例变量
类变量定义在类的定义之后,实例变量则是以为self.开头。例如:
if __name__ == '__main__':
foo = Foo()
print foo.val
print Foo.val
六、如何调用父类的构造函数
子类(派生类)并不会自动调用父类(基类)的init方法,例如:
class Foo2(Foo):
def __init__(self):
print self.val
if __name__ == '__main__':
foo2 = Foo2()
调用父类的init方法有两种,第一种:
class Foo2(Foo):
def __init__(self):
Foo.__init__(self)
print self.val
if __name__ == '__main__':
foo2 = Foo2()
class Foo2(Foo):
def __init__(self):
super(Foo2,self).__init__()
print self.val
if __name__ == '__main__':
foo2 = Foo2()