オブジェクト指向高く評価pythonのプログラミング

オブジェクト指向プログラミングとは何ですか?

OOP(オブジェクト指向プログラミング、OOPと呼ぶ)、「オブジェクト指向」プログラミングのアイデアですが、それ「プロセス指向」プログラミングのアイデアは非常に異なっている、異なるプログラミングのアイデアと問題の種類を解決することができますコード効率を大幅に向上させる、2つのアイデアが良いか悪いかではありません。

プロセス指向:、これらの手順を実装するための機能を使用し、その後、それをオンにするための呼び出しで使用されるステップ、バイステップで問題を解決するために必要なステップを分析します。

オブジェクト指向:個々のオブジェクトに分け、問題の情勢なるように、オブジェクトが問題解決の手順を通じて、完全なステップが、ミャオ族徐行動に事を確立することを意図していませんでした。

イラスト
実施例1:犬ケージ実装
のための:工程
(1)ケージ開く
犬に入れ(2)
ケージオフ(3)
オブジェクト指向:
「ケージに犬PUT」オブジェクトを作成し、このオブジェクトを完成させることができます行動、行為のこのシリーズを完了するために、オブジェクトを呼び出す
プロセス指向から-オブジェクト指向プログラマは、パフォーマーからのディレクターへの移行を実現

実施例2:バックギャモンゲーム実装
するための方法:
- (2)黒点の前- (3)描画ボード- (4)勝者と敗者を決定する- (1)ゲームを開始(5)はアルビノを置い- (6)ボードを描きます- - (7)を決定する勝者と敗者-ステップ(8)に戻る(2) - (9)の出力
オブジェクト指向:
全体のバックギャモンのゲームシステムは、3つの部分に分けることができる:
(1)プレイヤーシステム:黒と白の両方、行動の同じパターン
( 2)システムボード:ボードはリアルタイムにマッピングする責任がある
(3)規制システム:裁判官は、ファウル、勝利、失敗し、描画をし、他のリアルタイムのチェスゲーム
ファーストクラスのオブジェクト(エンスージアストシステム)は、ユーザ入力を受信するための責任があり、第一の入力に結果を渡します。オブジェクト・タイプII(システムボード)、チェスゲームの変化を通知するために、ゲーム状況に第三のクラスオブジェクト(システムルール)を使用しつつ、第2のクラス・オブジェクト(システムボード)は、ボードを描画するための責任があり、画面上の出力チェスゲームの動的変化決意。
図から分かるように、プロセスは、問題を解決するための具体的な手順のためのものである、という問題が指向機能オブジェクトを分割することです。

例3:次のような出力の実装
旅行に歩いて、20歳の郭を、
犬上げ、30歳の郭を、
漫画見て、40歳の郭を、
20歳の歳の劉、に足を走行
古い劉、30を歳、まだ結婚していない
漫画見て、40歳、劉
プロセス指向を:
ここに画像を挿入説明
オブジェクト指向:
ここに画像を挿入説明
出力:
ここに画像を挿入説明
あなたは20 --90歳のすべての生命の状態と劉郭それの年齢を入力したい場合は?プロセス指向を使用して、それは関数入力パラメータ{多数回(「クオ」、20)、(「ラオス」、30)}の実装に必要であるが、オブジェクト指向の使用は、オブジェクトのみ必要なパラメータを作成しますオブジェクト内にカプセル化され、再度パラメータを使用する場合、現在の自己を呼び出すことにより、オブジェクトに直接移動します

クラスとオブジェクトの作成

面向对象的编程方式需要用“类”和“对象”来实现。
简单来说,类就是一个模板,模板里可以包含多个函数,函数里实现一些功能;对象则是根据模板创建的实例,通过实例对象可以执行类中的函数。
ここに画像を挿入説明

什么是__init__()?

称其为构造方法或构造函数
首先要明确:类就是一种对象类型, 跟数值、字符串、列表等等类型一样。比如这里构建的类名字叫做Person,那么就是我们要试图建立一种对象类型,这种类型被称之为Person,就如同有一种对象类型是list一样。
在构建Person类的时候,首先要做的就是对这个类进行初始化,也就是要说明这种类型的基本结构,一旦这个类型的对象被调用了,第一件事情就是要运行这个类型的基本结构,也就是类Person的基本结构。
由于类是我们自己构造的,那么基本结构也是我们自己手动构造的。在类中,基本结构是写在__init__()这个函数里面。故这个函数称为构造函数,担负着对类进行初始化的任务。
但这并不意味着一旦创建好类,就会运行构造函数,而是需要“将类实例化”,也就是说,我们必须要根据类创建一个具体的对象,才会运行__init__()函数。

fir = Person("小郭",20,"女“)

上述语句就是将Person类实例化,也就是在内存中创建了一个对象,这个对象的类型是Person类型,通过赋值语句,与变量fir建立引用关系。

如果不写__init__()会怎样?

注意,如果编写时没有为该类定义任何构造方法,那么 Python 会自动为该类创建一个只包含 self 参数的默认的构造方法。
ここに画像を挿入説明
运行结果ここに画像を挿入説明
可以看到instance没有本应作为长方形而有的“长”“宽”属性,它的属性表是空的。
而且instance不能直接调用类中的方法,会报错。

什么是self?

此处的self,是个对象(Object),是当前类的实例。
fir = Person("小郭“,20,“女”)就相当于Person(fir,“小郭“,20,“女”)。
在Person实例化的过程中,数据"小郭”,20,"女"通过构造函数的参数已经存入到内存中,并且这些数据以Person类型的面貌存在组成一个对象,这个对象和变量 fir 建立引用关系。这个过程也可说成这些数据附加到一个实例上。这样就能够以:object.attribute的形式,在程序中任何地方调用某个数据,例如上面的程序中以fir.name得到"小郭"这个数据。这种调用方式,在类和实例中经常使用,点号“.”后面的称之为类或者实例的属性。

这是在程序中,并且是在类的外面。如果在类的里面,想在某个地方使用传入的数据,怎么办?

在类内部,我们会写很多不同功能的函数,这些函数在类里面有另外一个名称——方法。那么,通过类的构造函数中的参数传入的这些数据也想在各个方法中被使用,就需要在类中长久保存并能随时调用这些数据。为了解决这个问题,在类中,所有传入的数据都赋给一个变量,通常这个变量的名字是self。
在构造函数中的第一个参数self,就是起到了这个作用——接收实例化过程中传入的所有数据,这些数据是通过构造函数后面的参数导入的。显然,self应该就是一个实例(准确说法是应用实例),因为它所对应的就是具体数据。

面向对象的特性

ここに画像を挿入説明
属性用来描述对象的静态特征,用object.attribute 的语法来调用。
方法用来描述对象的动态特征,用object.function()的语法来调用。

比如一头家猪,它的属性(静态特征)是:粉色的,胖的,四条腿,一根尾巴等,它的方法(动态特征)是:会跑,会吃,会睡觉等。
面向对象有三大特性,分别为:封装性,继承性,多态性。下面分别对其做出简单介绍。

封装性

封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容。
所以,在使用面向对象的封装特性时,需要:
1.将内容封装到某处
2.从某处调用被封装的内容
这个”某处“既可以指在类的内部,也可以指在类的外部。
在类的外部调用被封装的内容,此时已经完成对类的实例化(也就是创建了一个对象),调用时直接object.attribute或object.function();如果是在类的内部,则利用self间接调用。

封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有那些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。

继承性

继承是类与类之间的关系,是一种创建新的类的方式,新创建的叫子类,继承的叫父类(超类、基类)。子类可以使用父类的属性,方法。通过使用面向对象的继承性,可以减少代码冗余、提高重用性。
语法是:class 类名(父类)
如果定义时并未显式指定这个类的直接父类,则这个类默认继承 object 类。
关于python中的多继承,可参考
python中的多继承

多态性

オブジェクトは、受信したメッセージの操作に応じました。異なるオブジェクトに同じメッセージが、多形として知られる現象を受け入れるように作用全く異なるコースを生成することができます。ポリモーフィズムのユーザーは、共通のメッセージを送信することができ、および実装の詳細のすべてがメッセージを受信するオブジェクトの裁量に任されており、もしそうなら、あなたはさまざまな方法で同じメッセージを呼び出すことができます。たとえば、次のメソッドの印刷メッセージを印刷法にタイムマップ又はテーブルと呼ばれ、呼び出されたテキストファイルを印刷に同じメッセージを送信した印刷は完全に異なるであろう継承の多型がサポートされ、クラスの継承階層を使用することは、契約は、可能な限り高いようにクラス階層に格納されている一般的な機能を有しており、下段に配置され、この機能を達成するための様々な方法、したがって、これらの低レベルのオブジェクトで発生する異なる応答メッセージに共通であることができます。

参考文献:
オブジェクト指向プログラミングは非常に簡単です
Python-は書き込みの古い学校の一つと一緒にインスタンスを作成するために
指向と差の対象のプロセス指向の性質

解決すべき問題:
関数型プログラミングとプロセス指向プログラミング1.python違いは?
あなたがオブジェクト、なぜobject.function()に動作していないを作成した後、2クラスにはコンストラクタは、ありませんか?class.function()は実行できますか?

公開された29元の記事 ウォンの賞賛3 ビュー961

おすすめ

転載: blog.csdn.net/weixin_44813932/article/details/103618698