オブジェクト指向の基礎を学ぶのpython 27--

オブジェクトの概念

 

それはどういう意味、「オブジェクト指向は、」言葉の「オブジェクト」の中核であるが、オブジェクトの本質は「統合」とは?

 

すべてのプログラムは、「データ」と「機能性」成分からのものであるので、プログラミングの性質は、一連のデータを定義し、データを操作するための一連の機能を定義することです。プログラムの中で「オブジェクト」を学習する前に、次のようにデータを分離し、

# 数据:name、age、sex
name='lili'
age=18 sex='female' # 功能:tell_info def tell_info(name,age,sex): print('<%s:%s:%s>' %(name,age,sex)) # 此时若想执行查看个人信息的功能,需要同时拿来两样东西,一类是功能tell_info,另外一类则是多个数据name、age、sex,然后才能执行,非常麻烦 tell_info(name,age,sex)

「オブジェクト」の学習の後、私たちは言うことができるので、機能を咲かせると、データができた容器を持っている:オブジェクトは、一緒に、製品のデータと機能を統合することである、または「オブジェクトが」ブルームです機能データコンテナ/ボックス/ボックス。

「データ」であれば「マスカラ」、「シャドウ」、「リップグロス」とメイクに必要な他の原料に比べて、ツールアイライナー、アイブロウペンシルメイクや他のニーズのためのメタファーとしての「機能」、次に「オブジェクト」でありますパレットは、メイクアップボックスが一緒にインストールされている「素材」と「ツール」することができ

 

私たちは、この時点で実行されるビジネスロジックのためのメタファーとして、「化粧」を取る場合は化粧箱は、すべての機能を原材料とあなたと比較したメイクを、必要に組み込んでいるためだけで、一つのことを持って、それは化粧箱であることができますより便利にするために、実行するために原材料や機能をもたらします。

 

オブジェクトの基本的な概念を学習した後、オブジェクト指向プログラミングは、比較的単純な、オブジェクト指向プログラミングの多くは一つのオブジェクト内にオブジェクトの数、関連するデータや機能の本来の広がりの統合を作成することである方法を理解します、使いやすい、解決策は、(ニーズがプロパティは、ソフトウェアの品質の多くの側面が含まれている、オブジェクト指向の拡張機能は、単に問題を解決することを強調することにする)ことにより、プログラムの拡張性を高め、手続きを結合度を高めることができないだけでなく、

 

セカンドクラスオブジェクト

そのカテゴリのクラス/カテゴリ、同様の機能を有する複数のデータオブジェクトならば、複数のオブジェクトが同じ種に属する、オブジェクト指向分析設計の基礎です。給付の種類と:私たちはこれだけすることができ、独自のデータ内の各オブジェクトを保持し、預金を繰り返すことなく、クラスに保存されたオブジェクトデータ、各オブジェクトの同じタイプで同じ機能を置くことができ、スペースが大幅に節約。オブジェクトは、データを格納するために使用される容器の関数であれば、その後、カテゴリは、容器の複数の機能オブジェクトと同じデータを格納するために使用されます。

要約すると、にもかかわらず、我々は最初のクラスの導入後に導入されていますが、ニーズが強調されるように:プログラムでは、クラスは事前に定義されている必要があり、そのオブジェクトを生成するクラスを呼び出す(戻り値はオブジェクトで取得するには、クラスを呼び出します)。この関連付け手段があり、クラス間の相関関係があり、生成したオブジェクトをオブジェクト:オブジェクトがクラスにデータや関数の共通にアクセスすることができますので、内容はまだオブジェクトのクラスに属し、クラスは単に省スペースで、オブジェクト指向プログラミングのコアの端部のコードの冗長機構を減らすオブジェクトを使用することがあります。

我々はオブジェクト指向がそれをプログラミング紹介することができるので、これらの2つのコアクラスとオブジェクトの概念を理解しました。

 

オブジェクト指向プログラミング3

のインスタンスの3.1クラス定義

我々例えば、単にオブジェクト指向の考え方に基づいてプログラムを書く方法を説明し、選択科目清華大学のシステムを開発しました

 

オブジェクト指向の基本的な考え方は、プログラムを使用することで、オブジェクトへの機能に関連したデータ、および、その後の使用を行くが、そう多くのデータや機能を使用するためのプログラムが、でもどのようにそれを見つけるには?私は役割で選択科目システムを抽出する必要があります:学生、教師、カリキュラムなどして、見かけ上のこと:関数への学生関連のデータを持つ学生は、教師が教師関連のデータや機能を持って、我々が持っている、単一の学生、例えば、

# 学生的数据有
学校
名字
年龄
性别 # 学生的功能有 选课

詳細

# 学生1:
    数据:
        学校=清华大学 姓名=李建刚 性别=年龄=28 功能: 选课 # 学生2: 数据: 学校=清华大学 姓名=王大力 性别=年龄=18 功能: 选课 # 学生3: 数据: 学校=清华大学 姓名=牛嗷嗷 性别=年龄=38 功能: 选课

私たちは、学生のクラスは、生徒が同じデータと機能を格納するために使用されることを結論付けることができます

# 学生类
    相同的特征:
        学校=清华大学 相同的功能: 选课

 

私たちは、その後、実行する必要があり、その後、クラス生成されたオブジェクトを呼び出して、上記の分析の結果に基づいて、プログラム内でクラスを定義しています

class Student: # 类的命名应该使用“驼峰体”

    school='清华大学' # 数据 def choose(self): # 功能 print('%s is choosing a course' %self.name)

最も一般的なボディタイプは、変数と関数の定義を定義することであるが、実際には任意のPythonコードを含めることができるクラス本体は、コードは、クラス定義段階のクラス本体に実行され、彼らはクラスで定義された新しい名前空間を格納するために使用することができます名前、あなたはコンテナに満開にこの事を見たい学生.__ dict__に印刷することができ

>>> print(Student.__dict__) {..., 'school': '清华大学', 'choose': <function Student.choose at 0x1018a2950>, ...}

 

プロシージャ・コールは、クラスのインスタンスのクラスと呼ぶことは、対象プログラムの戻り値を取得することで、一例として知られているまたはさ

>>> stu1=Student() # 每实例化一次Student类就得到一个学生对象 >>> stu2=Student() >>> stu3=Student()

名前、性別、年齢、:3人の学生が独自のデータをカスタマイズするために(一般的ではなく、独自のデータでのみクラスコンテンツ)STU1、STU2、すべてとしてstu3はそう、あなたはプロセスの一例をしたいです以下のように、私たちは、クラス内__init__メソッドを追加する必要があります

class Student:
    school='清华大学' #该方法会在对象产生之后自动执行,专门为对象进行初始化操作,可以有任意代码,但一定不能返回非None的值 def __init__(self,name,sex,age): self.name=name self.sex=sex self.age=age def choose(self): print('%s is choosing a course' %self.name)

その後、我々は3人の学生のうち、インスタンス化再

>>> stu1=Student('李建刚','男',28) >>> stu2=Student('王大力','女',18) >>> stu3=Student('牛嗷嗷','男',38)

学生.__のinit __(STU1、「李Jiangang」、「M」、28)を通過したクラスで呼び出されたときのパラメータを持つ括弧内STU1、その後、最初の空のオブジェクトSTU1を生成するクラスを呼び出します、分析することSTU1単一生成プロセスを取ります

def __init__(self, name, sex, age): self.name = name # stu1.name = '李建刚' self.sex = sex # stu1.sex = '男' self.age = age # stu1.age = 28

オブジェクトの名前空間を演出します、また__dict__で見ることができます

>>> stu1.__dict__
{'name': '李建刚', 'sex': '男', 'age': 28}

 

格納されたコンテンツオブジェクトが共有されているように、この時点で、私たちは、それぞれ独自のデータ、クラスとオブジェクトストアを3つのオブジェクトを作成します

 

存在の目的は、コンテンツ内に格納されたオブジェクトまたはクラスにアクセスする方法を、使用するのですか?

 

3.2プロパティへのアクセス

3.2.1クラス属性とオブジェクト属性

 

クラスのクラス名で定義されたクラスは、2つの属性があり、属性は、その後、手の込んだです:データ属性と機能の属性、アクセス属性値を__dict__することができ、そのような学生.__ dictの__ [「学校」]などを、しかし、 Pythonはプロパティへのアクセスのための特別な構文を提供します

イラスト:なりすましマップ

>>> Student.school # 访问数据属性,等同于Student.__dict__['school'] '清华大学' >>> Student.choose # 访问函数属性,等同于Student.__dict__['choose'] <function Student.choose at 0x1018a2950> # 除了查看属性外,我们还可以使用Student.attrib=value(修改或新增属性),用del Student.attrib删除属性。

オブジェクトのプロパティを操作することは同じです

>>> stu1.name # 查看,等同于obj1.__dict__[‘name'] '李建刚' >>> stu1.course=python# 新增,等同于obj1.__dict__[‘course']='python' >>> stu1.age=38 # 修改,等同于obj1.__dict__[‘age']=38 >>> del obj1.course # 删除,等同于del obj1.__dict__['course']

 

3.2.2プロパティの検索順序と結合方式

スペース内のオブジェクトの名前は、オブジェクトのユニークな特性を保持し、オブジェクトは、同様の属性は、クラスに格納されています。オブジェクトは、あなたが見つからない__dict__から、オブジェクト自体のプロパティにアクセスしたときに調べるを優先させて頂きます、[検索__dict__クラスに行きます

 

図1に示すように、クラスデータクラス属性で定義された変数は、同じメモリアドレスを指し、すべてのオブジェクトによって共有されています

# id都一样
print(id(Student.school)) # 4301108704 print(id(stu1.school)) # 4301108704 print(id(stu2.school)) # 4301108704 print(id(stu3.school)) # 4301108704

 

図2に示すように、クラス定義された関数は、関数属性クラスで、クラスを使用することができるが、関数パラメータの規則に従わなければならない、いくつかのパラメータは、いくつかのパラメータを渡すことが必要とされています

Student.choose(stu1) # 李建刚 is choosing a course Student.choose(stu2) # 王大力 is choosing a course Student.choose(stu3) # 牛嗷嗷 is choosing a course

しかし、すべてのオブジェクトが同一の機能を指しているが、実際には、クラス定義された関数は、主に、標的への標的と結合するために使用されるが、異なるオブジェクトにバインドされている異なる結合方法は、各メモリアドレスであります同じではありません

print(id(Student.choose)) # 4335426280 print(id(stu1.choose)) # 4300433608 print(id(stu2.choose)) # 4300433608 print(id(stu3.choose)) # 4300433608

最初の引数が自動的に渡されるように、目標特別に結合する方法は、(__init__メソッドは、同じ理由で、誰を呼び出す必要があります誰に結合が呼び出されることを、「誰そのものです)

stu1.choose()  # 等同于Student.choose(stu1) stu2.choose() # 等同于Student.choose(stu2) stu3.choose() # 等同于Student.choose(stu3)

彼らは選択科目ですが、異なるオブジェクトのスキルを選択するように結合したが、李Jiangangクラスを選択し、単語の本質を「結合」され、王ダリに選択しないでしょう。

#注意:绑定到对象方法的这种自动传值的特征,决定了在类中定义的函数都要默认写一个参数self,self可以是任意名字,但命名为self是约定俗成的。

 

Pythonではすべてがオブジェクトであり、我々は結合方式と接触していたので、のpython3クラスとタイプは、コンセプトであります

#类型list就是类
>>> list
<class 'list'>  #实例化的到3个对象l1,l2,l3 >>> l1=list([1,2,3]) >>> l2=list(['a','b','c']) >>> l3=list(['x','y'])  #三个对象都有绑定方法append,是相同的功能,但内存地址不同 >>> l1.append <built-in method append of list object at 0x10b482b48> >>> l2.append <built-in method append of list object at 0x10b482b88> >>> l3.append <built-in method append of list object at 0x10b482bc8>  #操作绑定方法l1.append(4),就是在往l1添加4,绝对不会将4添加到l2或l3 >>> l1.append(4) #等同于list.append(l1,4) >>> l1 [1,2,3,4] >>> l2 ['a','b','c'] >>> l3 ['x','y']

 

3.3.3まとめ

導入クラスとオブジェクトの使用では、より多くの我々は、使用の観点に立っている場合にのみ、クラスとオブジェクト間の関係を紹介する視点の基本原則に立って、私たちは文法「オブジェクトプロパティ」を考慮する必要があります最後に、「プロパティ」を知っているだけで必要性がその上にオブジェクトを介して取得することですどこから来て、そのオブジェクトはオブジェクトで、高度に統合製品であることを、私たちはただの構文を使用する必要があるでしょうが、「オブジェクトが.XXX」あなたは、このオブジェクトに関連付けられたすべてのデータと機能を得ることができ、解決策は非常に便利で、カップリングの非常に高いです。

 

おすすめ

転載: www.cnblogs.com/heirenxilou/p/12654303.html