オブジェクト指向機能:継承

継承

1.継承された特性

継承は推移的である
親の実装方法は、サブクラスのニーズを満たすことができない場合
、親クラスのメソッド書き換えることができる
1に親被覆する方法
2.親クラスの拡張方法を



class Animal:
    def eat(self):
        print('吃!!!')
    def drink(self):
        print('喝!!!')
    def run(self):
        print('跑!!!')
    def sleep(self):
        print('睡!!!')

class Cat(Animal):
# Cat类继承了Animal类
    def call(self):
        print('喵喵!!')

class Hellokitty(Cat):
    def speak(self):
        print('我可以说话')
    def call(self):
        # 调用原本在父类中封装的方法
        super().call()#保留父类的方法,进行重写。
        # 不加此句,子类中与父类同名的方法会覆盖父类的方法。
        # Cat.call(self) python2.x
        # 针对子类特有的需求 编写代码
        print('#%@@#$#@%')

class Dog(Animal):
    pass


cat = Hellokitty()
cat.eat()
cat.drink()
cat.run()
cat.call()

dog = Dog()
dog.run()
dog.eat()

ここに画像を挿入説明

2.クラスの構造

構造タイプ
1.オブジェクト指向開発を使用して、最初のステップは、設計クラスにあります
2.)(オブジェクトを作成し、クラス名を使用してオブジェクトを作成する2段階の作用を有します

  1. オブジェクトに割り当てられたメモリ空間に
  2. 初期化メソッドは、__init___オブジェクトの初期化と呼ばれています

3。オブジェクトが作成された後、メモリが対象の実在を持っています - 例
したがって:

例としては、クラスのアウトと呼ばれるオブジェクトの作成1.
オブジェクトインスタンス化するために呼び出されるアクションを作成2.
オブジェクトインスタンスが呼び出さプロパティ属性3.
Aメソッドはオブジェクトインスタンスメソッド呼び出しと呼ばれています

プログラム実行中:

1.オブジェクトのインスタンスプロパティは、それぞれが自分の持っている
方法2. Callオブジェクトを、あなたは自己できる:あなたの財産へのアクセスを、独自の方法を呼び出します

結論:

1.各オブジェクトは、それらの異なる性質節約するために、独自の独立したメモリ空間を持つ
2.複数のオブジェクトのメソッドを使用すると、メソッドを呼び出すとき、それは、メモリ内にあり、
オブジェクトの内部メソッドへの参照を渡す必要
ここに画像を挿入説明

ここに画像を挿入説明
結果:
ここに画像を挿入説明

3.新しいクラスとレガシークラス(クラシック)

新しいクラスとレガシー(従来の)クラス:
オブジェクトは、Python提供されるすべてのオブジェクトの基本クラスであり、いくつかの組み込みのプロパティとメソッドを使用することができるが設けられたファンクションDIRを表示します
新しいクラス:基本クラスへのクラスオブジェクト
クラシックオブジェクトは、基底クラスではありません

  • python3.Xがクラスで定義されたときに親クラスが指定されていない場合、デフォルトは基底クラスのオブジェクト-python3.x新しいクラスとして使用されますが、クラスを定義python2.xで定義されていない親クラスであれば、基底クラスなどのオブジェクトはしません

クラスを定義するときに親が、提案された統一オブジェクトから継承されていない場合、コードは、将来的には、python2.xとpython3.x実行で同時に書き込むことができるようにするには

[dd@foundation0 bin]$ /usr/local/python3/bin/python3
Python 3.6.4 (default, Aug 10 2018, 11:14:49)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class B :
... 	pass
...
>>> dir(B)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> class B(object):
... 	pass
...
>>> dir(B)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']


[dd@foundation0 bin]$ python
Python 2.7.5 (default, Aug  2 2016, 04:20:16)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class A:
...     pass
...
>>> dir(A)
['__doc__', '__module__']
>>> class A(object):
...     pass
...
>>> dir(A)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribut

4.super機能

スーパー()関数が使用されているメソッド呼び出し親クラス(スーパークラス)です。

スーパー、多重継承の問題を解決するために使用される単一の継承を使用した場合、問題なくクラス名は直接、親クラスのメソッドを呼び出していますが、多重継承を使用する場合、関与します(MRO)の順序を探します繰り返しコール(ダイヤモンド継承)やその他の問題。

ここに画像を挿入説明
ここに画像を挿入説明
ここに画像を挿入説明
あなたが所望の特性を見つけるまで、しかし、スーパー機能(唯一の新しいクラスに有用)で、それは、すべてのスーパークラス、およびスーパークラスのスーパークラスを探します。
ここに画像を挿入説明
結果を操作します。
ここに画像を挿入説明

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

おすすめ

転載: blog.csdn.net/qq_36275923/article/details/104256256