ノート39愚かな法学python練習44 inheritanceと組み合わせを継承

9487 ワード

ノート39愚かな法学python練習44 inheritanceと組み合わせて1、命令の準備を継承して今少しの学習方法をまとめることができて、すべての練習はする過程の中で、あまり熟知していない命令の符は、すべて調べてあるいは温めなければなりません.この点は毎回は難しいが、この要求が必要だ.人はたぶん自覚しているか、自覚していないか、省事の本性を逃れて、要求をしないで、いつもいい加減にします.どうせ面白いのは生計を立てるのではなく、このような状況で何かを学ばなければならない.また、勉強したい人やできるかどうかは一度のことではありません.工夫を凝らして何も知らない人は大勢いるはずです.これは人のいい加減な本性を助長します.覚えておいてください.前の練習にpassがあって、急いで練習を完成して、調べに行かなかった.今回の練習では、コードの冒頭がこのpassなので、これ以上暇を過ごす理由はないかもしれません.よく調べたrunoobでcomのホームページにあります.テストインスタンス:インスタンス#!/usr/bin/python#--coding:UTF-8--#出力Pythonの各アルファベットfor letter in‘Python’:if letter=‘h’:pass print‘これはpassブロック’print‘現在のアルファベット:’,letter print‘Good bye!"以上の例の実行結果:現在のアルファベット:P現在のアルファベット:y現在のアルファベット:tこれはpassブロック現在のアルファベット:h現在のアルファベット:o現在のアルファベット:n Good byeです!これを調べると、当然passの用途がわかります.暗黙関数implicit()をざっと理解する:このimplicitキーワードは、暗黙的なユーザ定義タイプ変換演算子を宣言するために使用されます.変換プロセスでデータが失われないことを確認できる場合は、このキーワードを使用して、ユーザー定義タイプと他のタイプとの間で暗黙的に変換できます.暗黙的な変換は、不要なタイプの変換を排除することによって、ソースコードの可読性を向上させることができる.ただし、暗黙的な変換では、プログラマが1つのタイプを明示的に別のタイプに強制的に変換する必要はないため、暗黙的な変換を使用する場合は、予期せぬ結果が発生しないように注意する必要があります.一般的に、暗黙的な変換演算子は、プログラマが知らない場合に安全に使用できるように、例外を起こさず、情報を失わないようにしなければならない.override関数をざっと理解しても、ざっとしかできません.勉強、理解と使用の間には本当に短い距離があります.オーバーライドとは?overrideの字面理解は無効で、消去の意味で、Pythonの中で2つの同名の方法で異なるプログラムを実行して、その中の1つの方法は別の方法を無効にして、これはoverride(書き換え)と呼ばれます.通常、親クラスのメソッドですが、子クラスには同じ名前のメソッドがあり、このメソッドを実行するときに呼び出されるのはメソッドに対応するクラスです.特筆すべきは、ここで父類と子類は原文の中でsuperclass(総綱)とsubclass(亜綱)であり、生物学用語を用いて、コンピュータの中の類と生物学分類の核心思想が似ていることを反応した.
前は暗黙的継承と明示的な上書きであり、3つ目の継承方法はsuper()であり、上書きの特例である.super()関数は、親(スーパークラス)を呼び出す方法です.superは多重継承問題を解決するために用いられ,直接クラス名で親を呼び出す方法は単一継承を用いる場合には問題ないが,多重継承を用いるとルックアップ順序(MRO),繰返し呼び出し(ダイヤモンド継承)など様々な問題に関与する.MROはクラスのメソッド解析シーケンステーブルであり,親メソッドを継承するときのシーケンステーブルである.以下はsuper()メソッドの構文です:super(type[,object-or-type])Python 3.x例:class A:def add(self,x):y=x+1 print(y)class B(A):def add(self,x):super().add(x) b = B() b.add(2) # 3
これらの準備をして、コードをノックして、まずex 44 aをノックします.py、これは暗黙的な継承を理解するコードです.
二、継承の5つの異なる状況第1の暗黙的な継承このex 44 aは、親クラスで関数implicit(self)を定義しているが、子クラスでは定義されていないため、この練習実行時に子クラスが親クラスのすべての行為または性質を継承するので、セッション44 aがある.教材の指示に従って、ex 44 aの行13を呼び出し、その呼び出しの意味を強固にする.この教材は何度も呼び出しを使って、人に明確な呼び出しの意味を理解させるのは練習40で、この言葉は私にとても啓示があるようで、“クラスを通じてあなたは1組の関数とデータを1つの容器の中に置くことができて、それによって“.”演算を使用して有効にします.ここでの有効化は呼び出しと同じ意味であるべきであることは理解できますが、クラスに関するコードでは、呼び出しのシンボルフラグがそれです.」アクセスと呼び出しは、同じ意味です.第2の明示的なオーバーライドは、ex 44 bをさらに見ると、親子に与えられる2つのクラスに関数定義があるため、結果としてサブクラスの関数が出力される.ex 44 aと比較して,前者はimplicit,後者はoverrideを用い,明らかな違いが認められた.暗黙的な継承と明示的なオーバーライドの違いも理解されます.クラスに定義を与えるのは、表現方法がより正規の関数とは異なり、defもコロンも必要ありません.この教材では、よく名前、つまりクラスで、「.」を付けます.implicitやoverrideのような関数を持っています.ゆっくり消化してください.第3の性質は基本的に関数を交換するだけでこの44 cを作ることができ、alteredはここではただの関数名であり、もう一つの関数は私たちが先に気づいたsuperである.この関数はChildとselfの2つのパラメータで呼び出され、呼び出された後に関数altered()が呼び出され、これによりPARENT altered()が印刷される.第4の組合せ式の運用はimplicit,override,superの3つの関数の組合せであり,当然ex 44 dである.しかし、並べ替えの順序は重要で、暗黙的にimplicitを前に置くと、印刷できる行は1行しかありません.教材別に並べ直すと、結果は教材の言うとおりです.私はもう1つの順序を変えて、superを前に置いて、どんな結果を見ますか?実行結果はaltered以前の実行結果と教材順序の結果が同じであることを示した.練習ex 44 e
 class Parent(object):

    def altered(self):
        print("PARENT altered()")


    def override(self):
        print("PARENT override()")

    def implicit(self):
        print("PARENT implicit()")


class Child(Parent):

    def override(self):
        print("CHILD override()")

    def altered(self):
        print("CHILD, BEFORE PARENT.altered()")
        super(Child, self).altered()
        print("CHILD, AFTER PARENT.altered()")

dad = Parent()
son = Child()

dad.implicit()
son.implicit()

dad.override()
son.override()

dad.altered()
son.altered()

 ex44e

```python
 PS C:\Users\lenovo\1pythonw> python ex44e.py
PARENT implicit()
PARENT implicit()
PARENT override()
CHILD override()
PARENT altered()
CHILD, BEFORE PARENT.altered()
PARENT altered()
CHILD, AFTER PARENT.altered()

`.ただしdef順序を変更すると、実行が変更される
 PS C:\Users\lenovo\1pythonw> python ex44d.py
PARENT implicit()
PARENT implicit()
PS C:\Users\lenovo\1pythonw> python ex44d.py

`第5の多重継承multiple-inheritance in python上段で述べたsuper関数は、pythonにおける多重継承、すなわち、1つの主体が複数の親属性と方法を継承する命令を理解するために使用することができる.最も一般的なのはsuperとベースクラスの中の_self_関数を組み合わせて使用し、親クラスでいわゆる初期化、すなわちそのinitを実現し、サブクラスで操作します.ちょっと複雑なようで、まず最初の理解をします.そのmroを簡単に見たばかりで、メソッド解析の順序とは、コード練習で感覚が見つかる可能性があると推定され、しばらく置いておきます.そして本の中のもう一つのクラスの組み合わせの定義を読んで、このクラスの定義はちょうど本章の最後のコードの練習の中で使用して、そのex 44 dは私はすでに使って、ここでex 44を使います.eで表す.でも、このコードがなぜsuper()と_self_関数を組み合わせて使用します.Superはこのex 44 fでは見えません.
ここでの2つの関係は考える価値があり、1つはAがBの関係であり、もう1つはAにBの関係がある.しかし、ここでの表現には問題があります.親子の関係は、なぜAがBの関係なのでしょうか.そうは言えないようですが、中国人と人はAがBの関係かもしれませんが、前の世代と次の世代は平行な関係で、含まれている関係ではなく、AにBの関係があるわけではありません.これは概念的な定義の問題にかかわっているかもしれませんが、ここの親世代はいわゆる親世代ではなく、子クラスよりも大きなクラスだと感じています.これはとても考えるべき問題で、やはり教材の中のあの強固な練習の中で言及したホームページを読みましょう.