Python面向对象编程4 抽象、多态

抽象类

抽象类是包含抽象方法的类,而按象方法不包含任何可实现的代码,只能在其子类中实现抽象函数的代码。
动物类 ==》体重、名字 >>>发出声音
猫类、狗类、猪类、牛类

class Animoal():
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight

    def say(self):
        print('汪汪')#不能强制写死,动物是不能发出具体声音的

class Cat(Animoal):
    def __init__(self,name,weight):
        super().__init__(name,weight)


class Dog(Animoal):
    def __init__(self, name, weight):
        super().__init__(name,weight)


cat_a = Cat('猫',12)
cat_a.say()

#需要对类提取一次公共属性和方法 ==》抽象类

改装之后代码如下:
方法1:在父类中强制实现,但在子类中需要实现父类的抽象方法,或把子类也声明抽象方法

from abc import ABCMeta,abstractmethod

class Animoal(metaclass=ABCMeta):#方法一:class Animoal(metaclass=ABCMeta):强制性
    #__metaclass__=ABCMeta   #方法二:抽象类首行需要加入
    def __init__(self,name,weight):
        self.name = name
        self.weight = weight

    @abstractmethod #定义抽象方法需要加入abstractmethod
    def say(self):
        pass#不能强制写死,动物是不能发出具体声音的

class Cat(Animoal):#父类是抽象类的时候:1、实现父类的抽象方法;2、把子类也声明为抽象类
    def __init__(self,name,weight):
        super().__init__(name,weight)

    def say(self):	#1、实现父类的抽象方法
        print('喵~')

class Dog(Animoal):
    def __init__(self, name, weight):
        super().__init__(name,weight)
	@abstractmethod	#2、把子类也声明为抽象类
    def say(self):
        print('汪~')
cat_a = Cat('猫',12)
cat_a.say()

#需要对类提取一次公共属性和方法 ==》抽象类

实例:
人类 —老师、学生
学生选课、老师授课
每个老师 == N个学生
每个学生 ==只能选择一个老师
学生:选择哪些课程等。

from abc import ABCMeta,abstractmethod

class People(metaclass=ABCMeta):
    def __init__(self,name,sex):
        self.name = name
        self.sex = sex
    @abstractmethod
    def goto_class(self):
        pass

class Stu(People):
    def __init__(self,name,sex,check_cource,check_teacher):
        super().__init__(name,sex)
        self.check_cource=check_cource
        self.check_teacher = check_teacher

    def goto_class(self):
        print('%s去教室听课'%self.name)

class teacher(People):
    def __init__(self,name,sex,stu_name):
        super(teacher, self).__init__(name,sex)
        self.stu_name=stu_name

    def goto_class(self):
        print('%s去教室授课'%self.name)

xiaoming = Stu('小明','男','语文','李老师')
xiaoming.goto_class()

多态:

多态指的是一类事物具有多种形态,只有存在父子类关系才会让一类事物具有多种不同的形态,因而多态的前提是必须要实现继承。在多态的实现过程中,经常会使用抽象类。
多态性:多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
列如:序列类型有多种形态:字符串、列表、元组

实例:

import abc

class File(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def double_click(self):
        pass

class TxtFile(File):
    def double_click(self):
        print('open file')

class ExeFile(File):
    def double_click(self):
        print('执行exe')

class VideoFile(File):
    def double_click(self):
        print('播放VideoFile')

def double_click(file_object):	#多态性
    file_object.double_click()

txt_file = TxtFile()
exe_file = ExeFile()

double_click(txt_file)
double_click(exe_file)



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值