python 面向对象的三大特性之一: 多态

Posted on 2019-10-29 14:38  S-skill  阅读(1175)  评论(0编辑  收藏  举报
一. 多态
python面向对象的三大特征之一: 继承,封装,多态
多态: python处处是多态(所有的对象都是object的子类的对象)
python : 弱类性语言 ,没有多态这个概念,处处是多态
python 不管什么类型,传入函数, 封装到对象中都可以

python 没有多态? 他有什么? 他有鸭子类型.
鸭子类型: 看着像鸭子,他就是鸭子.
二. 抽象类, 接口类(补充)
  from abc import ABCMeta, abstractmethod     # (模块)
  class Payment(metaclass=ABCMeta):  # 抽象类(接口类)
     @abstractmethod  # 规范下面这个方法  (要加规范,必须要有@abstractmethod)
        def pay(self):  # 制定了一个规范
           pass




1. 在python中处处是多态
# 这些类里都有一些相同的方法,这些类 , 都互称为鸭子类型
class Str:
    def index(self):
        pass

class List:
    def index(self):
        pass

class Tuple:
    def index(self):
        pass



2. 抽象类, 接口类
from abc import ABCMeta, abstractmethod
class Food(metaclass=ABCMeta):  # 抽象类(接口类)
    @abstractmethod     # 规范下面这个方法 (要加规范,必须要有@abstractmethod)
    def collect(self):      # 制定了一个规范
        pass

class Fruits(Food):
    def __init__(self,money):
        self.money = money

    def collect(self):
        print("卖苹果得了%s" % self.money)

class Meat(Food):
    def __init__(self,money):
        self.money = money

    def collect(self):
        print("卖牛肉得了%s" % self.money)

class Drink(Food):
    def __init__(self,money):
        self.money = money

    def collect(self):
        print("卖冰红茶得了%s" % self.money)

def collect(obj):
    obj.collect()

f1 = Fruits(200)
m1 = Meat(1000)
d1 = Drink(300)
collect(d1)     # 归一化设计

 

 

 

 

 

 

 

 

 

Copyright © 2024 S-skill
Powered by .NET 8.0 on Kubernetes