首页 > 其他分享 >多态和多态性

多态和多态性

时间:2023-10-30 11:11:05浏览次数:24  
标签:多态性 self 多态 animal print class def speak

什么是多态: 一类事物的多种形态这是其中的体现

比如: 动物类:猪,狗,人

多态基础

class Ani0mal:
    def speak(self):
        pass
   
class Pig(Animal):
    def speak(self):
        print('哼哼哼')
   
class Dog(Animal):
    def speak(self):
        print('汪汪汪')
       
class People(Animal):
    def speak(self):
        print('say hello ')
        
pig = Pig()
dog = Dog()
people = People

def animal_speak(obj):
    obj.speak()
animal_speak(pig)
animal_speak(people)

多态性: 是不同类型对象表现出不同行为的概念,是指在不考虑实力类型的情况下使用实例

好处: 1.增加了程序的灵活性。2.增加了程序额可扩展性。3.做约束,约束我的子类干....

第一种方式: 用abcAbstract Base Classes实现接口统一化,约束代码(用的比较少)

import abc
# 第一个括号中写metaclass=abc.ABCMeta
class Animal(metaclass=abc.ABCMeta):
    # 第二在要约束的方法是,写@abc.abstractmethod装饰器
    @abc.abstractmethod
    def speak(self):
        pass
   
class Pig(Animal):
    def xx(self):
        print('哼哼哼')
   
class Dog(Animal):
    def yy(self):
        print('汪汪汪')
       
class People(Animal):
    def zz(self):
        print('say hello')
      
# people = people()
# people.zz()
# 这样就不是多态了
# def animal_speak(obj):
#     obj.speak()
# animal_speak(pig)
# animal_speak(people)

pig = Pig()			# 如果Pig类没有以speak定义函数,则会报错

第二种方式,用异常处理来实现(常用)

class Animal():
    def speak(self):
        # 主动抛出异常
        raise Exception('你得给我重写他')
    
class Pig(Animal):
    def speak(self):
        print('哼哼哼')
class People(Animal):
    def zz(self):
        print('say hello')
   
pig = Pig()
pe = People()
def animal_speak(obj):
    obj.speak()
   
animal_speak(pig)
animal_speak(pe)

python中还崇尚鸭子类型:(只要有像)

只要走路像鸭子(对象中有某个绑定方法),那你就是鸭子(约束的对象)

class Pig:
    def speak(self):
        print('哼哼哼')
       
class People:
    def speak(self):
        print('say hello ')
   
pig = Pig()
pe = People()
def animal_speak(obj):
    obj.speak()
animal_speak(pig)
animal_speak(pe)

Linux 一切皆文件

传统方法

class File:
    def read(self):
        pass
    def write(self):
        pass
   
# 内存类
class Memory(File):		# 内存
    def read(self):
        print("Memoty...read")
    def write(self):
        print("Memory...write")
class Netword(File):	# Netword card 网卡
    def read(self):
        print("Netword...write")
    def write(self):
        print("Netword...write")

鸭子类型的写法(没有约束,自己定义,人为的)

class Memory:		# 内存
    def read(self):
        print("Memoty...read")
    def write(self):
        print("Memory...write")
class Netword:	# Netword card 网卡
    def read(self):
        print("Netword...write")
    def write(self):
        print("Netword...write")
       
def read(obj):
    obj.read()
m = Memory
n = Netword
read(m)
read(n)

标签:多态性,self,多态,animal,print,class,def,speak
From: https://www.cnblogs.com/hanyingshuo/p/17797312.html

相关文章

  • 类变量,类方法,私有变量,私有方法,继承,多态
    Defrun(self):Print(‘{}在跑’.format(self.name))dog.run()Self说明当前的方法是一个实例方法(类的实例化的方法),将方法绑定到当前的实例上面去。 类变量的调用 类方法的调用 cls是表示类的类型,看成默认的即可。   私有变量    私有方法  ......
  • Java 静态代码块、代码块、构造方法和多态继承的代码执行顺序
    测试代码importlombok.Getter;publicclassExecutionOrder{{System.out.println("ExecutionOrdercode0");}static{System.out.println("ExecutionOrderstaticcode");}{System.out.println(&......
  • Python 中多态性的示例和类的继承多态性
    单词"多态"意味着"多种形式",在编程中,它指的是具有相同名称的方法/函数/操作符,可以在许多不同的对象或类上执行。函数多态性一个示例是Python中的len()函数,它可以用于不同的对象。字符串对于字符串,len()返回字符的数量:示例x="HelloWorld!"print(len(x))元组......
  • Python 中多态性的示例和类的继承多态性
    单词"多态"意味着"多种形式",在编程中,它指的是具有相同名称的方法/函数/操作符,可以在许多不同的对象或类上执行。函数多态性一个示例是Python中的len()函数,它可以用于不同的对象。字符串对于字符串,len()返回字符的数量:示例x="HelloWorld!"print(len(x))元组对......
  • Go 如何实现多态
    在Go语言中,虽然没有经典的面向对象编程中的继承和多态的概念,但你可以通过接口(interface)来实现多态性。Go语言鼓励组合和接口多态,这使得代码更加灵活和模块化。下面将详细介绍Go语言中如何实现多态。多态性是面向对象编程的一个核心概念,它允许不同类型的对象在一致的接口下执......
  • 多态的使用以及多态底层的实现(上)
    什么是多态我们让不同的对象去完成同一件事情,这件事情的结果是不一样的,例如买火车票,我们学生买火车票,普通人买火车票,或是军人买火车票最后结果都是不一样的。多态的要求是什么首先一定是要在继承中虚函数重写必须是父类的指针或是引用去调用例如下面的这个代码就构成了多态:classPe......
  • 多态的使用以及多态底层的实现(下)
    经过之前的学习我们知道了,继承能够实现多态的原理就是,在继承的父类和子类中各自存在一个虚表,父类和子类的虚表中各自储存了自己的虚函数,不同的点就是如果我们完成了虚函数的重写,那么子类(派生类)虚表中的那个虚函数地址是重写后的虚函数的地址。所以我们虚函数重写还有一个名字就是虚......
  • 8.5 C++ 继承与多态
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • 8.5 C++ 继承与多态
    C/C++语言是一种通用的编程语言,具有高效、灵活和可移植等特点。C语言主要用于系统编程,如操作系统、编译器、数据库等;C语言是C语言的扩展,增加了面向对象编程的特性,适用于大型软件系统、图形用户界面、嵌入式系统等。C/C++语言具有很高的效率和控制能力,但也需要开发人员自行管理内存......
  • C++多态与虚函数
    多态与虚函数1.什么是多态所谓多态,就是同一个函数名具有多种状态,或者说一个接口具有不同的行为;C++的多态分为编译时多态和运行时多态,编译时多态也称为为静态联编,通过重载和模板来实现,运行时多态称为动态联编,通过继承和虚函数来实现。1.1编译时多态重载(Overloading)是指同一......