高度なパイソン[4-1]継承|継承された定義/判定でisinstanceのクラス/タイプ継承()

1.継承されている何

OOPプログラミング
[OOP(オブジェクト指向プログラミング、OOP、オブジェクト指向プログラミング)は、コンピュータ・プログラミング・アーキテクチャです。OOPは、単一のユニットまたはオブジェクトの組み合わせの役割を果たすことができるコンピュータプログラムサブルーチンの基本原理です。]

私たちは、クラスを定義するとき、彼らは既存のクラスを継承することができ、
新しいクラスが呼び出され、サブクラス(サブクラス)
継承されたクラスが呼び出された親クラスまたはスーパークラス、基底クラス(基本クラス、スーパークラス)

たとえば、私たちはそこで、動物と呼ばれるクラスを書かれているrun()直接印刷する方法は:

class Animal(object):
    def run(self):
        print('Animal is running...')

私たちは犬と猫のクラスを記述する必要があるときは、Animalクラスから継承することができます。

class Dog(Animal):
    pass

class Cat(Animal):
    pass

話す犬のために、動物は、その親クラスである、動物は話すために、犬はそのサブクラスです。猫と犬と類似。

継承されたメリットは何ですか?

最大の利点は、サブクラスは、親クラスのすべての機能を取得することです。
Animialが達成して以来run()の方法を、それゆえ、そのサブカテゴリーとして犬や猫は、何もしなかった、あなたは自動的にアクセスしていrun()メソッドを:

dog = Dog()
dog.run()

cat = Cat()
cat.run()

結果は以下の通りであります:

Animal is running...
Animal is running...

もちろん、あなたはまた、そのような犬クラスとしてサブクラスのメソッドを、増やすことができます。

class Dog(Animal):

    def run(self):
        print('Dog is running...')

    def eat(self):
        print('Eating meat...')

コードを継承する第2の利点は、我々は改善のビットを行う必要があります。あなたはそれが犬や猫であるかどうか、参照、彼らはディスプレイは動物が実行されているとき...、論理的なアプローチは、犬が実行されて表示することです()を実行...と猫は犬と猫のクラスのために、そのため、...実行されています次のような改善は、以下のとおりです。

class Dog(Animal):

    def run(self):
        print('Dog is running...')

class Cat(Animal):

    def run(self):
        print('Cat is running...')

もう一度実行して、次のように、結果は以下のとおりです。

Dog is running...
Cat is running...

ときに親クラスとサブクラスが同じrun()メソッド、私たちが言う、サブクラスラン()のコードが実行されている場合、()の実行親クラスをカバーし、常に(実行サブクラスを呼び出します) 。



2、Pythonはクラスを継承しました

あなたは、Personクラスを定義した場合、我々はPersonクラスから継承することができ、新たな学生と教師のクラスを定義する必要があります。

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

Studentクラスの定義、のみなどのスコアなどの追加の属性を追加する必要が:

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score

使用しなければならないsuper(Student, self).__init__(name, gender)親クラスを初期化するために、
それ以外の場合は、名前を付けないであろう学生の人と性別から継承されました。

機能スーパー(学生、自己が)現在のクラスが、その後人、と呼んでいることを、親クラスを継承返す__init__()方法を、自己のパラメータに注意を払うが、(スーパーに渡されている)、__init__()暗黙の転送は、書き込みに必要(ない書き込みできなくなります)。

タスク

人からも継承を先生のクラスを記述し、学生のクラスを参照してください。

コード

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

class Teacher(Person):

    def __init__(self, name, gender, course):
        self.name = name
        self.gender = gender
        self.course = course

t = Teacher('Alice', 'Female', 'English')
print t.name
print t.course

ここに画像を挿入説明

3、Pythonの決定タイプ

機能isinstance()変数の型に基づいて内蔵も、当社のカスタムクラスで使用されるように、PythonのSTR、リスト、辞書などのデータ型、で使用することができる、彼らは基本的にすべてのデータ型です。

次のように以下の人、定義と継承学生と教師を検討します。

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score

class Teacher(Person):
    def __init__(self, name, gender, course):
        super(Teacher, self).__init__(name, gender)
        self.course = course

p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English')

私たちは、変数p、S、Tを取得すると、使用できるisinstanceタイプを決定します。

>>> isinstance(p, Person)
True    # p是Person类型
>>> isinstance(p, Student)
False   # p不是Student类型
>>> isinstance(p, Teacher)
False   # p不是Teacher类型

これは、アナログのプロパティとメソッド子がより親ための親クラスのインスタンスは、サブクラス型ではない、継承チェーンに示されています。

私たちは、Sを調べてみましょう:

>>> isinstance(s, Person)
True    # s是Person类型
>>> isinstance(s, Student)
True    # s是Student类型
>>> isinstance(s, Teacher)
False   # s不是Teacher类型

sが、理解しやすい、学生のタイプではなく、教師のタイプです。
人から理由学生継承ただし、Sは、それがより多くの人のプロパティおよびメソッドよりもあるが、しかし、人の例が可能であるように、Person型です。

1つの継承鎖上のこのショーは、それはまた、親クラスの型として見ることができる、独自の種類の一例と見なすことができます。

タスク

継承チェーンに応じた変換を入力してください、tは人、学生、教師、オブジェクトタイプ、および使用でisinstance()判決は、あなたの答えを検証するかどうかだと思い続きます。

コード

class Person(object):

    def __init__(self, name, gender):
        self.name = name
        self.gender = gender

class Student(Person):

    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score

class Teacher(Person):

    def __init__(self, name, gender, course):
        super(Teacher, self).__init__(name, gender)
        self.course = course

t = Teacher('Alice', 'Female', 'English')

print isinstance(t,Person)
print isinstance(t,Student)
print isinstance(t,Teacher)
print isinstance(t,object)

ここに画像を挿入説明

公開された20元の記事 ウォンの賞賛0 ビュー387

おすすめ

転載: blog.csdn.net/yipyuenkay/article/details/104531099