古い新しいクラス、プライベートメソッド、クラス属性とクラスメソッド、静的メソッド - Pythonのオブジェクト指向

  1)新しいクラス(推奨):あなたは、クラスを定義する場合、括弧の後ろのクラスは、基本クラス(オブジェクト)を継承する必要があります。親クラスが指定されていない場合python3.xでは、デフォルトは、基本クラスのオブジェクトとして使用される、親クラスが指定されていない場合python2.xで、オブジェクトは、基本クラスとしてではありません。

  2)古いスタイルのクラス(クラシック):あなたは、クラスを定義する場合、ブラケットの背後にあるクラスであっても、括弧なしで、オブジェクトのクラスを継承しません。

  3)内蔵方法DIRは、クラスを表示するために使用されます。

第二に、プライベートメソッドとプロパティ

  1)オブジェクトは、私有財産望ましくない特性が開示されている; privateメソッドはしたくなかった方法で開示する主題です。プロパティやメソッド名を追加する前に、あなたは(2つのアンダースコア)__、民間のプロパティとメソッドを定義する場合

#クラスの男を定義します。


クラスマン(オブジェクト):

  デフ__init __(自己、氏名、年齢):


      self.name =名前

      自己.__年齢=年齢の#は、プライベート属性の年齢を定義します

  デフ__secret(自己):

      %(self.name、自己.__年齢): "%sの年齢の%sは" 印刷


  デフテスト(自己):#パブリッククラスには、私有財産とプライベートメソッドを呼び出すことができます


      自己.__秘密()

デモ=マン( 'デモ'、18)

#プライベートプロパティにアクセスすることはできません

#印刷demo.age

#プライベートメソッドにアクセスすることはできません

#demo.secret()

demo.test()

問題の2)継承私有財産とプライベートメソッド:サブクラスが継承私有財産と親クラスのプライベートメソッドはできません

クラスA(オブジェクト):

  デフ__init__self(自己、名):

      自己.__年齢= 18の#は、プライベートとパブリックプロパティ属性を定義します

      self.name =名前

  デフ__secret(自己):

      %(self.name、自己.__歳) "年齢の%sは%sの" 印刷

クラスB(A):


  デフテスト(自己):

      印刷self.name

      #プライベートプロパティと親クラスのメソッドにアクセスすることはできません


      #プリント自己.__年齢 

      #自己.__秘密()

デモ= A( 'デモ')

外の世界で#は、親クラスのプライベートプロパティとメソッドにアクセスすることはできません。

demo.test 

第三に、クラス属性とクラスメソッド

  1)クラスオブジェクト:クラスはまた、クラス・オブジェクトと呼ばれる特別なオブジェクトです。それはまた、オブジェクトクラスの属性およびそれらの対応するメソッド、プロパティ、およびクラスと呼ばれるクラスのメソッドです。


  2)クラスプロパティ:クラス・オブジェクトがプロパティが定義され、一般にクラス特性に関連付けられて記録するために使用される、特定のオブジェクトの特性を記録しません。classキーワードの下で定義されました。

  3)クラスメソッド:クラスオブジェクト定義のメソッド、クラスメソッド内でのみクラス属性またはクラスのメソッドを呼び出すことができます。定義されたフォーマット:@classmethod DEFクラス名():パス 

 クラス玩具(オブジェクト):

  カウント数= 0#を使用するクラス属性を定義する代入文


  デフ__init __(自己、名):

      self.name =名前

      Toy.count + = 1#オブジェクトが作成されるたびに、カウンタは1だけインクリメントされます


  クラスメソッド定義されて@classmethod#の識別


  デフshow_toy_count(CLS):

      %のcls.count「%dにおもちゃの対象の数を」印刷します


#おもちゃのオブジェクトを作成します。

toy1 =玩具( 'LEGO')


toy2 =玩具( 'おもちゃの車')

Toy.count#コールクラス属性


Toy.show_toy_count()#は、クラスメソッドを呼び出します

第四に、静的メソッド

  1)静的メソッド:;このメソッドは、クラスメソッドへのアクセスを必要としないインスタンスの属性やインスタンスメソッド、またはクラス属性へのアクセスを必要としない、クラスをカプセル化する方法では、必要に応じて、開発時には、この時点では、我々は静的メソッドをカプセル化することができます方法。定義されたフォーマット:@staticmethod DEFクラス名():パス 

クラスキャット(オブジェクト): 

    @staticmethod

    #インスタンス属性/プロパティのクラスにアクセスすることはできません

    #静的メソッドは、最初のパラメータの自己を渡す必要はありません


    デフ呼び出し():

        「ニャーニャーニャー~~~」印刷


コールへ#によって「静的メソッドのクラス名。」;(んが、あなたは直接の静的メソッドを呼び出すことができるオブジェクトを作成する必要はありません)

野次る()   

第五に、総合的なクラスのインスタンスオブジェクト、クラス、属性、静的メソッド 

  1)要件:ゲームデザインクラス


    プロパティ:プロパティレコード高いポイントが記録ゲーム(クラス属性)top_score定義する
          プロパティPLAYER_NAMEレコード現在のプレイヤーの名前のゲーマー(インスタンスプロパティ)を定義する
    方法:
          show_helpディスプレイをゲームヘルプ情報(静的メソッド、そのパラメータ)が
          過去最高を表示show_top_socreポイント(クラスメソッド、パラメータCLS)
          ゲームの現在のプレイヤーのstart_game開始(インスタンスメソッド、自己のパラメータ)

輸入ランダム


ゲームのクラス(オブジェクト):
    top_score = 0#はクラス属性を定義するには、最高のスコアが算出され
    DEF __init __(自己、名):
        self.play_name名=
        Game.top_score#= 0に初期化され
    @staticmethodの
    DEFのshow_help():#は、静的に定義します機能
        プリント「ゲームのヘルプ」
        印刷「ランダムに生成された番号1-10の最初の10個のポイントを推測3つの推測;。!第二は、5点を推測し、第3の時間推測;! 0推測推測終了していないために3ポイントその後、あなたは最高のスコアを記録します!」

    #はインスタンスメソッド定義:デフstart_game(自己)
        NUMがrandom.randintを=(1、10)
        = 0のスコア
        範囲のIのために(3):
            ユーザーレビュー= INT(raw_input( "コピー推測する番号を入力してください:"))
            IF =ユーザーレビューNUM =
                IF I == 0:
                    スコア= 10 +
                    BREAK
                。I ==のelif 1:
                    スコア+ = 5。
                    BREAK
                他:
                    スコア+ = 3。
                    BREAK
            他:
                スコア= 0
        %スコア印刷"のD%の暁スコア"
        スコアIF > Game.top_score:
            Game.top_scoreスコア=


    @classmethod   
    DEF show_top_socre(CLS):#はクラスメソッドを作成し、表示ゲームのスコア最高の
        印刷"が表示さ最高得点:%s"は%のcls.top_score

#ビューゲームのヘルプ

Game.show_help()

 オブジェクトのゲームを作成します#

xming = Game('小明')

#スタート演奏

xming.start_game()

#は、歴史的に高いポイントを見ます

Game.show_top_socre()
 
例の概要:

図1に示すように、方法の例:メソッドは、インスタンス属性への内部アクセスを必要とします。

2、クラスメソッド:メソッド内の「のみ」のアクセスクラスのプロパティ

3、静的方法:内部メソッド、アクセスクラスインスタンス属性とプロパティに不要

図4に示すように、内部メソッドは、それがインスタンスメソッドとして定義することができ、クラスのプロパティにアクセスする必要がある、両方のインスタンスのプロパティを必要とします

おすすめ

転載: www.linuxidc.com/Linux/2020-02/162275.htm