時には、選択的条件によってオブジェクトを作成する必要が、あなたは目的を達成するために、静的クラスメソッドまたはメソッドを使用することができます。
1静的メソッド@staticmethod
前に、私たちは、これらのメソッドは、オブジェクトにメッセージを送信していること、クラスのメソッドは、オブジェクトのメソッドで定義します。実際に、我々は、例えば、私たちは「三角形」クラスのオブジェクトメソッドを定義しているクラスを必要としないプロセスに書き込み、方法は、三本の提供する算出長さと周囲を通過する三角形の辺が、入ってくる3を構築します辺の長さは、三角形オブジェクトを構築することができないかもしれないので、我々は、3辺の長さが三角形を形成することができるかどうかを確認するための方法で開始することができるなしため、このメソッドを呼び出すときには(アウト作成されていない三角形オブジェクトので、この方法は、オブジェクトのメソッドではないことは明らかです我々は、三角形を構成する3つの辺)を知ることができないので、この方法は、三角形状の物体に属し、三角形の一部ではありません。あなたはこのような問題を解決するための静的メソッドを使用することができます。
クラストライアングル(オブジェクト):
デフ__init __(自己、A、B、C):
self._a = A
self._b = B
self._c = C
@staticmethod
(A、B、C)DEF IS_VALID。
+ B> CとB + C> Aおよび+ C> Bを返します
デフ周囲長(自己):
リターンself._a + self._b + self._c
DEFメイン(A、B、C)。
Triangle.is_valid(A、B、C)==真の場合:
T =トライアングル(A、B、C)
印刷( '三角形の周囲長:%s' は%t.perimeter())
他:
印刷(「三角形を形成することができません。」)
__name__ == '__main__' の場合:
メイン(3,4,5)
メイン(1,2,3)
メソッド@classmethodクラス2
より静的な方法と同様、Pythonはまた、クラスのクラスメソッドで定義された最初のパラメータにCLSという名前のクラスメソッドを合意することができ、その情報を関連するオブジェクトの現在のクラス(クラス自体は標的であり、いくつかの場所を表しますメタデータオブジェクト)は、クラスと呼ばれる、このパラメータは、我々は情報と関連するクラスを取得し、クラスの外にオブジェクトを作成することができます。
クラストライアングル(オブジェクト):
デフ__init __(自己、= 0、B = 0、C = 0)。
self._a = A
self._b = B
self._c = C
@classmethod
デフIS_VALID(CLS):
リターンCLS(A、B、C)
デフ周囲長(自己):
リターンself._a + self._b + self._c
DEFメイン(A、B、C)。
+ B> CとB + C> AとA + C> Bの場合:
T = Triangle.is_valid()
印刷( '三角形の周囲長:%s' は%t.perimeter())
他:
印刷(「三角形を形成することができません。」)
__name__ == '__main__' の場合:
メイン(3,4,5)
メイン(1,2,3)
同じ出力:
三角形の境界:12
三角形を形成することができません。