首页 > 其他分享 >封装、继承、多态及重载

封装、继承、多态及重载

时间:2023-08-06 12:44:40浏览次数:31  
标签:gzm 封装 self 多态 pub 重载 qj data def

1.封装

​ 封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,避免了外界直接访问对象属性而造成耦合度过高及过度依赖,同时也阻止了外界对对象内部数据的修改而可能引发的不可预知错误。

例子1:封装后通过实例化来访问类里边的变量

image-20230805153758911

image-20230805153719771

例子2:封装后通过实例化来访问类中的函数

image-20230805154102931 image-20230805154334507

封装后,外部访问类中的变量和函数时需要实例化类,才能访问类中的方法和变量

2.继承

​ 继承最大的好处就是增强了代码复用性,提高了开发效率,降低了创建对象、类的工作量。

class TBase_Stope(TBase):
    def __init__(self):
        self.pub_gzm_no = ''
        self.pub_gzm_name = ''
        self.pub_gzm_cg_h = 0.0
        self.pub_gzm_qj = 0.0 
    
    def fun_base_jsdata(self, data):
        self.pub_gzm_no = data['pub_gzm_no']
        self.pub_gzm_name = data['pub_gzm_name']
        self.pub_gzm_cg_h = data['pub_gzm_cg_h']
        self.pub_gzm_qj = data['pub_gzm_qj']
        
    def fun_base_output(self):
        data = {
            'pub_gzm_no': self.pub_gzm_no,
            'pub_gzm_name': self.pub_gzm_name,
            'pub_gzm_cg_h': self.pub_gzm_cg_h,
            'pub_gzm_qj': self.pub_gzm_qj
        }
        return data
        
class TExp_Stope(TBase_Stope): # 继承TBase_Stope类
    def __init__(self):
        super().__init__()
        self.pub_gzm_day_speed = 0.0
        self.pub_gzm_sx_qj = 0.0
        self.pub_gzm_sh_up = 0.0

    def fun_exp_jsdata(self, data):
        self.fun_base_jsdata(data) # 调用了TBase_Stope类的fun_base_jsdata函数
        self.pub_gzm_day_speed = data['pub_gzm_day_speed']
        self.pub_gzm_sx_qj = data['pub_gzm_sx_qj']
        self.pub_gzm_sh_up = data['pub_gzm_sh_up']
        
    def fun_exp_output(self):
        data = {
            'pub_gzm_no': self.pub_gzm_no,
            'pub_gzm_name': self.pub_gzm_name,
            'pub_gzm_cg_h': self.pub_gzm_cg_h,
            'pub_gzm_day_speed': self.pub_gzm_day_speed,
            'pub_gzm_qj': self.pub_gzm_qj,
            'pub_gzm_sx_qj': self.pub_gzm_sx_qj,
            'pub_gzm_sh_up': self.pub_gzm_sh_up
        }
        return data

self.fun_base_jsdata(data)调用中,由于TExp_Stope类继承了TBase_Stope类,因此TExp_Stope对象可以调用TBase_Stope类中定义的fun_base_jsdata方法,输出结果将是TExp_Stope类不需要复写pub_gzm_no,pub_gzm_name,pub_gzm_cg_h,pub_gzm_qj这四个变量,且可以调用fun_base_jsdata()这个函数。

3.多态

​ 多态是指同一个方法名可以根据不同的对象类型表现出不同的行为。简而言之,多态允许使用不同的对象来调用相同的方法,产生不同的结果

class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        print("汪汪汪!")

class Cat(Animal):
    def sound(self):
        print("喵喵喵!")

class Duck(Animal):
    def sound(self):
        print("嘎嘎嘎!")

# 创建不同的动物实例
dog = Dog()
cat = Cat()
duck = Duck()

# 使用相同的方法名调用不同的对象
dog.sound()  # 输出: 汪汪汪!
cat.sound()  # 输出: 喵喵喵!
duck.sound()  # 输出: 嘎嘎嘎!

不同的类中可以有相同的函数名,每个类调用自己的函数输出结果是不同的,互不干预

4.多态之重载

​ 函数重载是指定义多个同名函数,每一个都有不同的参数列表。调用函数时,会根据传递的参数类型、数量等信息,选择对应的函数执行。

Python不支持函数重载,但是可以使用其他方法达到类似的功能。

​ Python中可以使用默认参数来实现函数重载的功能。例如:

def add(a, b=0, c=0):
    return a + b + c

result1 = add(1)
result2 = add(1, 2)
result3 = add(1, 2, 3)
print(result1) # 输出:1
print(result2) # 输出:3
print(result3) # 输出:6

在上述例子中,定义了一个名为add的函数,它有三个参数:a、b和c。其中b和c有默认值0,如果调用add时只传入一个参数,那么b和c都将使用默认值0来计算。

标签:gzm,封装,self,多态,pub,重载,qj,data,def
From: https://www.cnblogs.com/yanni123/p/17609293.html

相关文章

  • 前端学习笔记202306学习笔记第三十八天-封装检测数据类型得方法1
      ......
  • 第十节 多态练习
    需求 1.定义狗类 属性: 年龄,颜色 行为: eat(Stringsomething)(something表示吃的东西) 看家lookHome方法(无参数) 2.定义猫类 属性: 年龄,颜色 行为: eat(Stringsomething)方法(something表示吃的东西) 逮老鼠catchMouse方法(无参数) 3.定义Person......
  • cookie封装
    cookie封装当提到"cookie封装",通常是指在开发中对浏览器cookie的处理进行封装和管理,以简化代码和提高可维护性。在Web开发中,cookie是一种用于存储少量数据的小文件,存储在用户的浏览器中。它们被广泛用于跟踪用户会话,记录用户偏好,进行用户身份验证等。在进行cookie封装时,你可......
  • Vue封装一个瀑布流图片容器组件
    说在前面......
  • 第十六节 面向对象进阶(多态&包&final&权限修饰符&代码块)
    今日内容多态包final权限修饰符代码块教学目标能够说出使用多态的前提条件理解多态的向上转型理解多态的向下转型能够知道多态的使用场景包的作用public和private权限修饰符的作用描述final修饰的类的特点描述final修饰的方法的特点......
  • 在vue项目中封装WebSockets请求
    在Vue项目中封装WebSocket请求包括以下步骤:1.安装WebSocket库:首先,导入WebSocket库,例如`vue-native-websocket`或`socket.io-client`。根据项目需求选择适当的库,并根据官方文档进行安装和配置。2.创建WebSocket服务:在Vue项目中,可以创建一个WebSocket服务,用于管理连接、发送和接收......
  • DO-41封装整流二极管 1N4001G~1N4007G 型号齐全
    整流二极管1000V、1A,一般选用什么型号?最好DO-41封装!同样是DO-41封装反向电压1000V,1N4007和1N4007G有什么区别?1N4007G参数怎么看?价格多少?供货周期要多久?方便发下产品规格书吗?……针对上述提及的问题,整流二极管厂家东沃电子(DOWOSEMI)一一耐心为您解答。1)1000V1A整流二极管型号有哪些?......
  • jquery方法封装
     /*comment.js*/;(function($){ //消息显示$.message=function(content){$('#message').attr('data-content',content);$('#message').popover('show');setTimeout(function(){$(&......
  • 基于antd-input & tsx封装一个按固定位数、固定符号分隔内容的输入框
    /** *可在每四位字符间插入一个空格的输入框 */import{Input}from'antd';import{useEffect}from'react';constInputGap=(props:any)=>{ const{useGap,value,onChange}=props; //非onChange事件变更value useEffect(()=>{  value......
  • IDEA编译封装APK及发布流程指导
    IDEA编译封装APK及发布流程指导目录IDEA编译封装APK及发布流程指导1、安装AndroidSDK2、创建Android项目3、项目结构4、运行环境准备5、安卓虚拟机运行APP6、发布APK注:以下步骤基于IDEACommunity2023.1.1版本操作1、安装AndroidSDK一开始检查无SDK安装,点击next进行安装:......