20日知人のオブジェクト指向

1.オブジェクト指向の概念(OOP):それはオブジェクト指向プログラミングのアイデアの一種であります

  1.オブジェクト指向プログラミングのアイデア:これらのオブジェクトは、タスクを完了するために相互作用のコアはプログラムの対象となるオブジェクトのコレクションで、プログラムは規制のために責任があります

    3つの利点:1:スケーラビリティのプログラマは、特定の機能を完了するためにオブジェクトを見つけるのを助けることができる導体にオペレータによって視点、およびオブジェクトは、我々が設計する必要が土台がないわけではありません。

         2:オブジェクトが変更された場合、強力な柔軟性、それは他のオブジェクトには影響しません

         3:強力な再利用性は、複数のオブジェクトを1つずつを追加することなく、同じ機能を持つことができます。

    短所:(1)プログラムの複雑さを向上させるためには、(2)正確な結果を予測することはできません

    使用シナリオ:手順について高いスケーラビリティ要件、通常直接ユーザに、そのようなマイクロチャネルQQとして

  2.プロセス指向プログラミングのアイデア:プロセスのコア、ステップにステップバイステップでは、その後、何をすべきか

    長所:論理的な、複雑な問題を単純化するために、プロセス

    OK:貧しいスケーラビリティ、保守性、それはさらに、プログラム全体を変更することが可能である変更する必要がありました

    使用可能:システムのカーネル、gitの、電卓:下の延長手続き要件について

2.クラスとオブジェクトの概念:コア内のオブジェクト指向の概念、すなわち、クラス、オブジェクト、

  1.クラス:タイプ、カテゴリ、抽象的な概念は、同じ特性やオブジェクトの振る舞いと直列の集まりではなく、実在です

  2.オブジェクト:個体におけるタイプ、指定された人間として、特定の物事の存在は、自分の特性と動作を持っている、オブジェクトの特性とスキルの組み合わせです

  3.オブジェクトとクラス間の関係:クラスは、一連のオブジェクトが含まれ、オブジェクトがクラスに属するプログラムの最初の、オブジェクトクラスを持つために、我々はそのようなオブジェクトが持っているコンピュータに伝える必要がありながら、生活の中で既存のオブジェクトは、クラスにあり特性や行動は何ですか

  4.結論:オブジェクト指向プログラミングを使用する場合は、最初のステップは、オブジェクトが、オブジェクトが持っているヤンに必要なものを考えることですに従い、必要な情報の種類をまとめた機能と私の行動の種類、

3.クラスとオブジェクトを作成する方法

  1.クラス定義の構文は次のとおり:

クラスのクラス名:
     #のコンテンツクラスは、属性やスキル説明
    #の変数と説明属性
    #は関数のふるまい記述

#1 上記のすべてのクラス名の明細書をイタリアの名を知られている名前を参照してください大きなこぶ命名されている   ハンプは大きな大文字の単語でありますこぶが大文字に最初の文字で、小さなこぶは、最初の文字を小文字であります

  2.チェコ共和国、オブジェクト構文:

Objectクラス名=()

  3.例:

クラスステュ:   #はクラスステュ定義
    合格


学生 =スチュー()   も、オブジェクトをインスタンス化するために呼ばれ、学生のクラスのオブジェクトを作成し、コールステューを

 

、各オブジェクトは一意であるプロパティがクラスに記述することができ、クラス属性は、すべてのオブジェクトに共通して、オブジェクトに書き込むことができ、オブジェクトのプロパティ:どのような特性を設計すること4。

クラスのStu:
    ADDR = ' 天津'  #は、プロパティの追加定義
    デルを ADDR    addrの属性ステュクラスを削除 
    ADDR = ' 天津' 
    のaddr = " 上海"  #はaddrのプロパティを変更します



S1 = スチュー()
 印刷(s1.addr)    アクセス上海 
= s1.name  #の学生S1ユニークなプロパティクラスオブジェクト名の追加
印刷(s1.nameに)   
プリント(S1。__class__#のクラス情報アクセスオブジェクトの
印刷を(S1。__dict__#のアクセスオブジェクトのプロパティ

検索順序属性:同じクラスの属性とオブジェクトに存在する場合は、アクセス権なしクラス場合は、オブジェクトにアクセスするには 

クラスのStu:
    ADDR = " 上海"   #はaddrのプロパティ変更され


、S1 = スチュー()
 印刷(s1.addr)  上海 
s1.addr = ' 北京' 
印刷(s1.addr)  北京

6.初期化方法:また、初期化方法として知られているクラスの__init__メソッドは、基本的機能であります

    特徴:オブジェクトがインスタンス化される場合(1)、方法は自動的に実行され__init__

       (2)自動的に最初の引数、自己というパラメータとしてオブジェクトれ、自己が別の名前ではなく、提案された変更することができます

    機能:オブジェクトの初期プロパティに割り当てられたユーザー

クラスステュー:

    デフ __init__ (自己、名前、年齢、ADDR):
        self.name = 名前
        self.age = 年齢
        self.addr = addrは


S1 =スチュー(' 小明'、18、' 上海' プリント(s1.name、 s1.age、s1.addr)  小18上海明
小さな道、初期の過度のプロパティ
クラスのStu:

    DEF  __init__ (セルフ、名前、年齢、ADDR):
        LCS = 地元の人々についての()
        lcs.pop(' 自己' 
        セルフ。__dict__ .Update(LCS)



S1 =スチュー(" ボブ '18、 ' 上海" を印刷(s1.name、s1.age、s1.addr)  暁明上海18

7.結合および非結合アプローチ方法

  1:オブジェクト結合法:デフォルトのオブジェクトを使用すると、最初の引数として、自動的に着信オブジェクト自体この関数を呼び出します

  2:クラスの結合法:最初の引数は装飾を@classmethodようにかかわらず、クラスやオブジェクトの呼び出し、クラス自体が渡されます

  3:静的メソッドとして知られている無結合方法であって、クラス外部装飾@staticmethodで定義された同等の方法

  4.シーン:機能ロジックは、データオブジェクトにアクセスするために必要な場合、論理関数は、クラス結合方法を使用して、データクラスにアクセスするために必要なときにオブジェクトデータにアクセスするための論理機能もまた、ある場合には、結合方法をオブジェクトデータの方法を使用している場合、クラスをバインドする必要はありません

クラスステュー:
    学校 = ' Oldboy ' 

    DEF  __init__ (セルフ、名前、年齢、学校):
        self.name = 名前
        self.age = 年齢の
        self.school = 学校

    @classmethod 
    DEF の話(CLS):
         印刷(F {CLSから.school} " 


S1 =ステュ(' ボブ'、15、' 推測' #1 Stu.talk() 

自分の推測追加することなくクラスメソッドからs1.talk()# 
s1.talkを()   oldboyからの添加後

7.シリアライズされたオブジェクトの演習:

「」「
演習:メソッドクラスに学生を取得するための保存方法の追加
オブジェクトがファイルに格納されたセーブ
取得ファイルからオブジェクトを取得することである
」「」
インポートピクルス
 クラス:スチュー
     DEF  __init__ (セルフ、名):
        self.name =を名前

    DEF 保存(セルフ):
        オープンで(F ' self.name .pickle {} '" WB " )F AS:
            pickle.dump(セルフ、F)は

    @staticmethod   静的メソッドを
    DEF GET(名):
        オープンで( F ' {名前} .pickle '" RB ")Fのように:
            OBJ = pickle.load(F)
             リターンOBJ 

S1 =ステュ(' ' #1 s1.save() 
S2 = Stu.get(' ' プリント(s2.name)

 

8.運動物体の相互作用

  

クラスヒーロー:

    DEF  __init__ (自己、名前、レベル、HP、q_hurt、w_hurt、e_hurt):
        self.name = 
        self.level = レベル
        self.hp = HP 
        self.q_hurt = q_hurt 
        self.w_hurt = w_hurt 
        self.e_hurt = e_hurtの

    デフQ(セルフ、TO_NAME):
        to_name.hp - = self.q_hurtの
         印刷(F {self.name}对{to_name.name}造成了{self.q_hurt}伤害、{to_name.name}剩余{TO_NAME。 HP}血

    DEF (自己、TO_NAME)W:
        to_name.hp - = self.w_hurtの
         印刷(F " self.name {to_name.name} {self.w_hurt}引き起こす損傷、{to_name.name} {to_name.hp}残留血液の{} " 

    DEF E(セルフ、TO_NAME):
        to_name.hp - = self.e_hurtの
         印刷(F ' {} self.name {to_name.name} {self.e_hurt}引き起こす損傷、{to_name.name} {to_name.hp}残留血液の


xiaoqiao =ヒーロー(' ジョー'、10,600,50,100,150 
NOC =ヒーロー(' 悪夢'、15,500,200,400,600 
choice_list = [xiaoqiao、NOC] 
NAME_LIST = [xiaoqiao.name、noc.name] 
func_dict = {
     ' Q ' :Hero.q、
     ' W ' :Hero.w、
     ' E ' :Hero.e 
} 
しばらく。1 のためのインデックス名列挙(NAME_LIST) :
         印刷(インデックス、名前)
    の選択 = INT(INPUT(操作したいのヒーローを選択番号に従っててください))
    TO_NAME = INT(INPUT(あなたが望む数字に応じて選択してくださいヒーローがためである))
    スキル = INPUT("使用したいスキルを入力してください"場合スキルはない func_dict:
         続ける
    
        func_dict [スキル](choice_list [選択]、choice_list [TO_NAME])
    場合 choice_list [TO_NAME] .HP <= 0:
         印刷(F {choice_list [TO_NAME] .nameの}死亡、游戏结束" 休憩

 

おすすめ

転載: www.cnblogs.com/yanglingyao/p/11240295.html