オブジェクト指向の章VII
1、プロセス指向のプログラミングコアは単語が何をしてから行うことです、問題、解決するためのプロセスステップを指し、「プロセス」である組立ラインを書くようなプログラムを書くためのアイデアをもとに、思考の機械的な方法です。
利点:複雑な問題のプロセス、およびのさらなる簡素化短所:貧しいスケーラビリティ
図2に示すように、オブジェクト指向のコア「対象」単語オブジェクト特性(可変)を参照して、組み合わせの能力(機能)は、本一つの特定のオブジェクトを作成する必要があるオブジェクトの相互作用によって直接実行されるプログラムの実行を
利点:スケーラビリティの問題点:上記のプロセス指向プログラミングの複雑さ
7.1クラス
7.11クラスを定義します
図1は、クラス:オブジェクトは、一連のオブジェクトに類似しており、技術の組合せを特徴と種類、特性やスキルの組み合わせであります
2は、現実の世界で:クラスは単なる抽象的な概念である一方で、我々は最初のオブジェクトを持っている必要がありますし、後でクラスをまとめた人類の文明の発展と、オブジェクトは、具体的な存在があります
:3は、プログラムでは、ことを確認してくださいオブジェクトを生成するクラスを呼び出した後、最初のクラスを定義します
クラスOldboyStudent: 学校 = 「Oldboy 」 #のオブジェクトは、同様の特性を持っている DEF(セルフ)はこちら: #のオブジェクトは、同様のスキル持ち 印刷(「学んでいます... 」)
注:相はコードのクラスのクラス本体に直ちに実行される定義は、クラスの名前を格納するクラスの名前空間、処理空間内に生成されたコードの実装体のクラス名を生成します
どのように表示するには:
印刷(OldboyStudent。__dict__) #のビューの名前空間のクラスは、辞書はの形で表示され 印刷(OldboyStudent。__dict__ [ ' 学校' ]) #Oldboyの印刷(OldboyStudent.school) #Oldboyの印刷(OldboyStudent。__dict__ [ ' 学び' ] ) #<機能OldboyStudent.learn AT 0x00000146F735BD90> 印刷(OldboyStudent.learn) #<機能OldboyStudent.learn AT 0x00000146F735BD90> OldboyStudent。__dict__ [ ' 学ぶ' ](123) #を学んでいる... OldboyStudent.learn(' XXX ') #を学んでいる... OldboyStudent.country = ' 中国' #增 OldboyStudent.school = ' 偶的博爱' #改 デル OldboyStudent.country #删 プリント(OldboyStudent。__dict__)
7.12の呼び出しは、オブジェクトのクラスを生成します
クラスOldboyStudent: 学校 = " Oldboy " #変数とは、前記表し DEF __init__(セルフ、名前、年齢、性別): #の自己STU1を=名前= "馬Dongmei" = 18は、セックス年齢= "女性"である self.name名= #のSTU1。 = "馬Dongmei"名前 self.ageの年齢を= #1 stu1.age = 18である self.sexセックス= #1 stu1.sex = "FEMALE" DEFはこちら(自己): # 機能表現スキルの 印刷を(' ...学んでいます' 、セルフ) DEF選択(自己): 印刷(' コースを選択... ')
クラスは何が起こっ呼ぶのです。
1、まず空のオブジェクトSTU1生成自動的にトリガーするクラス内、2 機能3を、次いで括弧内のパラメータを使用して空のオブジェクトは、コール・クラス(STU1、「MA Dongmei」、18、「女性」)STU1 、 これら渡された四つのパラメータを持つ関数 __init__
__init__
オブジェクトを作成する初期化処理、オブジェクトの機能セット
STU1 = OldboyStudent(" MA Dongmei "、18であり、' 女性') #OldboyStudent .__のinit __(STU1、 "MA Dongmei" 18は、 '女性') STU2 = OldboyStudent(" 甘い"、21は、' 男性') #OldboyStudent .__ init__ (STU2、 "甘い"、21は、 '男性') stu3 = OldboyStudent(" ラフ開口部" 22は、' 男性' ) プリント(stu1.name、stu1.age、stu1.sex) プリント(stu2.name、STU2 .age、stu2.sex) 印刷(stu3.name、stu3.age、stu3.sex)
オブジェクトを作成する初期化処理の後に、オブジェクト特徴セット
STU1 = OldboyStudent() stu1.NAME = ' 马冬梅' stu1.AGE = 18 stu1.SEX = " 女性" プリント(stu1.NAME、stu1.school)
---オブジェクトクラスのクラス」が生成される呼び出し、被験者はまた、プロシージャ・コールクラスクラスのインスタンスとして知られ、クラスのインスタンスと呼ぶことができます
7.13クラスの名前空間オブジェクトと名前空間
#の学校= 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' クラスOldboyStudent: #1 学校= 'oldboy' 名前= ' axaxaxaxxaaxs ' デフ __init__ (自己、名前、年齢、性別): self.name = 名前 self.age = 年齢 self.sex = セックス STU1 = OldboyStudent (' 李三胖'、18、' 男性')#OldboyStudent .__のinit __(STU1、 '李三胖'、18 '男性') プリント(stu1.name) #名前空間とクラスSTU1ターゲット名前空間は、名前の持っている#李3つの優先自身の脂肪 を印刷(stu1.school) #ときなしオブジェクトの名前空間STU1スクール、Oldboyクラスの名前空間の検索 #の名前空間が好きではないがときにエラー
オブジェクトのプロパティの順序を探す:最初のオブジェクト自身の名前空間を見つける----「クラスの名前空間
7.14結合方法に関する特別
クラスOldboyStudent: デフ学ぶ(自己): 印刷(' %sが学んでいる'%のself.name)
クラス変数内の1がすべてのオブジェクトに共有され、すべてのオブジェクトは、同じメモリアドレスを指し示します
プリント(ID(stu1.school)) # 2143429964384 プリント(ID(stu2.school)) # 2143429964384 プリント(ID(OldboyStudent.school)) # 2143429964384
2.機能クラス内、クラスが使用されてもよいが、クラスである場合、一般的な関数、関数は、いくつかのパラメータを渡すことが一般的いくつかのパラメータを有します
印刷(OldboyStudent.learn) #<0x000001E46CA5CF28での関数OldboyStudent.learn> OldboyStudent.learn(STU1) #の李三胖が学んでいます
3.内部クラス定義された関数、実際には、オブジェクトを使用することであり、それはによって標的に結合する別のオブジェクトへの結合が異なる結合方法で、メモリアドレスは同じではありませんが、実際には同じ機能を指します
印刷(stu1.learn)# <<__ __メイン。OldboyStudentオブジェクト0x000001FC28E2BB38で>>のバインド方法OldboyStudent.learn プリント(stu2.learn) #<バインド方法OldboyStudent.learn __メイン__ <の。OldboyStudent対象0x000001FC28E2BB70で>>
特別な方法をバインドすることです:
呼び出す必要があります誰が誰に結合する1、最初の引数として誰を呼ぶ、2、他のパラメータがあるかもしれませんが
stu1.learn() #OldboyStudent.learn(STU1)#の李三胖学んでいる stu2.learnを() #OldboyStudent.learn(STU2)#王大炮学んでいます
オブジェクトカウンタの作成7.15
クラスはFoo: N = 0 DEF __init__ (自己): Foo.n + = 1 #不要写成self.n + = 1 OBJ1 = フー() OBJ2 = フー() OBJ3 = フー() プリント(OBJ1。__dict__) #{} プリント(OBJ2。__dict__) #{} プリント(OBJ3。__dict__) #{} プリント(obj1.n) #3 プリント (obj2.n) #3 プリント(obj3.n) #3