ポリモーフィズム
多型は、異なる形態、物の同じタイプを指し
ポリモーフィックオブジェクト:
また、既知の多型「多型」、統一された仕様と呼ばれるオブジェクトは、オブジェクトの特定のタイプを知らない場合に、方法の目的(例:名前)
ポリモーフィック表現「のいずれかの形式は、」継承されています
まず抽象的、そして継承
import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
@abc.abstractmethod
def talk(self):
pass
class People(Animal): #动物的形态之一:人
def talk(self):
print('say hello')
class Dog(Animal): #动物的形态之二:狗
def talk(self):
print('say wangwang')
class Pig(Animal): #动物的形态之三:猪
def talk(self):
print('say henghengheng')
:多型は、Pythonで、異なるタイプの例と同様の方法で、コールのタイプを考慮することなく、実施例インスタンス。例えば、ヒト、ネコ、イヌ、および限り、それが継承されるよう動物は、直接話()メソッドを呼び出すことができます
peo=People()
dog=Dog()
pig=Pig()
#peo、dog、pig都是动物,只要是动物肯定有talk方法
#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo.talk()
dog.talk()
pig.talk()
#更进一步,我们可以定义一个统一的接口来使用
def func(obj):
obj.talk()
プログラムの柔軟性を高める1
現状を維持することに関係なく、刻々と変化する対象ユーザのようなFUNC(動物)として、コールフォームの同じ種類であります
スケーラビリティプログラムの量を増やす2.
新しい動物のカテゴリを継承したクラスを作成し、ユーザーが呼び出しにあなたのコード、または使用FUNC(動物)を変更する必要はありません
抽象クラス
1は、組み込みのPythonのABCモジュール、抽象クラスがあります
2、抽象クラスの役割は:サブクラスは親クラスで記述された仕様に従わなければならない作ります
抽象クラスを実装する方法3。
ABCは継承親モジュールに必要、メタクラス= abc.ABCMeta
親クラスのメソッドでは、装飾abc.abstractmethodを必要と
注Pythonで抽象クラスを使用すること。
注意:サブクラスは親クラスのメソッドに基づいて仕様を記述する必要があり、不可欠です。(いくつかを定義する必要があるサブクラス、長いいくつかの方法が存在するように抽象親クラスとして)
アヒルタイプ
1.タイプのアヒルは何ですか?
異なるオブジェクトが、ちょうどアヒルのように見え、アヒルのアクションのような役割を果たし、それはアヒルです!
あなたは、鳥はアヒルのように歩き参照アヒルのように泳ぎ、アヒルのように鳴くときは、この鳥はアヒル呼び出すことができます。
ダックタイプは、多型の形です。
2.なぜダックタイピングがありますか?
彼らにカスタム仕様の制服セットを与えるアプローチの抽象同じタイプの異なるオブジェクト、。
統一基準に基づいて作成定義するときにすべてのクラスが行われています。
- 三つの形式の多型:
- 親クラスを継承****
- 高、低スケーラビリティプログラムを結合します
- 抽象クラスを継承します***
- カップリングの高度は、手順が極めて低いスケーラビリティです
- アヒルは、入力します。*****
- 低カップリング、高い拡張性プログラム
- 親クラスを継承****
class A:
def login(self):
pass
def register(self):
pass
class B:
def login(self):
pass
def register(self):
pass
# A,B两个类,没有任何关系,独立两个,但是里面的功能相似,所以python一般会将类似于A,B两个类
# 里面的相似的功能让其命名相同.
# A,B虽然无关系,但是很默契的制定了一个规范.让你使用起来更方便.
## 个人理解:
#你可以定义一个公共的接口, 简化代码 .牛逼人都这么干
def func(obj):
obj.register()
obj.login()
__len__()
str1 = 'tank is very handsome!!!'
list1 = ['tank', 'is', 'very', 'handsome!!!']
# print(str1.__len__())
# print(list1.__len__())
# 自定义统计长度函数
def LEN(obj):
return obj.__len__()
print(LEN(str1))
print(LEN(list1))
print(len(str1))
print(len(list1))