2.1 面向对象

news2025/1/16 1:59:15

文章目录

    • 初始对象
    • 成员方法
    • 构造方法
    • 其他内置方法
    • 封装
    • 继承
      • 继承的基础语法
        • pass
      • 复写和使用父类成员
    • 类型注解
      • 变量的类型注解
      • 函数(方法)的类型注解
      • Union类型
    • 多态

初始对象

样例:

# 定义类
class Student:
    name = None
    gender = None
# 创建对象
stu_1 = Student()
stu_2 = Student()
# 赋值对象
stu_1.name = '张三'
stu_2.name = '李四'
# 输出信息
print(stu_1.name)

输出结果:
在这里插入图片描述

成员方法

类其实分为两部分:1.属性,也就是数据存放处。2.是行为,也就是类内部的函数。

# 定义类
class Student:
    name = None

    def say_hi(self):
        print(f"hello 大家好,我是{self.name}")
# 创建对象
stu_1 = Student()
stu_2 = Student()
# 赋值对象
stu_1.name = '张三'
stu_2.name = '李四'
# 输出信息
print(stu_1.name)
stu_2.say_hi()

输出结果:
在这里插入图片描述

构造方法

Python类可以使用:__init__()方法,称之为构造方法

可以实现:

  1. 在创建类对象的时候,自动执行
  2. 创建对象的时候,将传入参数自动传递给__init__方法使用。

样例:

# 定义类
class Student:
    name = None
    age = None
    tel = None

    def __init__(self,name,age,tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("构造完成")

# 创建对象,并构造对象
stu_1 = Student("张三",18,"13910000000")
# 输出信息
print(f"我是{stu_1.name},我的年龄是{stu_1.age},我的电话是{stu_1.tel}")

输出结果:
在这里插入图片描述

其他内置方法

魔术方法(内置方法):

  1. __init__:构造方法,详情见上。
  2. __str__:字符串方法

样例:

# 定义类
class Student:
    name = None
    age = None
    tel = None

    def __init__(self,name,age,tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("构造完成")
    def __str__(self):
        return f"我叫{self.name},我的年龄是{self.age},我的电话是{self.tel}" # 注意的是,我们是将此处变成一个字符串
    
# 创建对象,并构造对象
stu_1 = Student("张三",18,"13910000000")
# 使用将类对象转化为字符串
print(stu_1)
print(str(stu_1))

输出结果:
在这里插入图片描述

  1. __lt__:小于大于符号比较

样例:

# 定义类
class Student:
    name = None
    age = None
    tel = None
    # 构造方法
    def __init__(self,name,age,tel):
        self.name = name
        self.age = age
        self.tel = tel
    # 转换成字符串的方法
    def __str__(self):
        return f"我叫{self.name},我的年龄是{self.age},我的电话是{self.tel}"
    # 比较的方法,注意的是统一使用<
    def __lt__(self, other):
        return self.age < other.age
# 创建对象,并构造对象
stu_1 = Student("张三",18,"13910000000")
stu_2 = Student("李四",24,"13800000000")
# 比较大小
print(stu_1<stu_2)
print(stu_1>stu_2)

输出样例:
在这里插入图片描述
4. __le__:小于等于、大于等于符号比较

样例:

class Student:
    name = None
    age = None
    tel = None
    # 构造方法
    def __init__(self,name,age,tel):
        self.name = name
        self.age = age
        self.tel = tel
    # 转换成字符串的方法
    def __str__(self):
        return f"我叫{self.name},我的年龄是{self.age},我的电话是{self.tel}"
    # 比较的方法,注意的是统一使用<
    def __lt__(self, other):
        return self.age < other.age
    # 小于等于大于等于
    def __le__(self, other):
        return self.age<=other.age
# 创建对象,并构造对象
stu_1 = Student("张三",18,"13910000000")
stu_2 = Student("李四",24,"13800000000")
# 比较大小
print(stu_1<stu_2)
print(stu_1>stu_2)
print(stu_1<=stu_2)
print(stu_1>=stu_2)

输出结果:
在这里插入图片描述
5. __eq__:==符号比较

# 定义类
class Student:
    name = None
    age = None
    tel = None
    # 构造方法
    def __init__(self,name,age,tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("构造完成")
    # 转换成字符串的方法
    def __str__(self):
        return f"我叫{self.name},我的年龄是{self.age},我的电话是{self.tel}"
    # 比较的方法,注意的是统一使用<
    def __lt__(self, other):
        return self.age < other.age
    # 小于等于大于等于
    def __le__(self, other):
        return self.age<=other.age
    def __eq__(self, other):
        return self.age==other.age
# 创建对象,并构造对象
stu_1 = Student("张三",18,"13910000000")
stu_2 = Student("李四",24,"13800000000")
# 使用将类对象转化为字符串
print(stu_1)
print(str(stu_1))
# 比较大小
print(stu_1<stu_2)
print(stu_1>stu_2)
print(stu_1<=stu_2)
print(stu_1>=stu_2)
print(stu_1==stu_2)

输出结果:
在这里插入图片描述

封装

封装描述的是:
将现实世界的 属性,行为封装到类中,描述为成员对象,成员方法从而完成对现实世界的描述。

但是现实世界中也存在着私有成员,就是有一些东西仅仅只能是开发者了解,但是使用者并不能进行使用。这就涉及到了私有成员,以及私有方法。

具体的命名方式:
在私有成员对象的变量名前加上__
在私有成员方法名前加上__
相对应的对象或方法就会变成私有的。

私有成员的访问限制:
类对象无法访问私有成员对象。
类中的其他成员可以访问类对象。

class Phone:
    __is_5g_enable = None # 私有成员对象
    def __init__(self,tag): # 构造函数
        self.__is_5g_enable = tag
        print("构造完成")
    def __check_5g(self): # 私有方法
        if self.__is_5g_enable==True :
            print("打开了5g")
        else:
            print("没有打开5g")
    def call_by_5g(self):  # 公有方法
        self.__check_5g()
        print("正在通话中")

tel1 = Phone(True)
tel1.call_by_5g()

输出结果:
在这里插入图片描述

继承

继承的基础语法

单继承:

class 类名(父类名):
	类的新内容体

多继承:

class 类名(父类名1,父类名2……):
	类的新内容体

样例:

class Phone:
    is_4g_enable = True

    def check_4g(self):
        if self.is_4g_enable == True:
            print("4g打开")


# 单继承
class Phone2022(Phone):
    is_5g_enable = True

    def check_5g(self):
        if self.is_5g_enable == True:
            print("2022年新功能:5g打开了")


Phone = Phone2022()
Phone.check_4g()
Phone.check_5g()

# 多继承 pass代表着这个类是空的,即是这个内内部的内容仅有继承的,没有其他的
class open_4g:
    is_4g_enable = True

    def check_4g(self):
        if self.is_4g_enable == True:
            print("2023年新功能:4g打开")

class open_5g:
    is_5g_enable = True

    def check_5g(self):
        if self.is_5g_enable == True:
            print("2023年新功能:5g打开了")

class Phone2023(open_4g, open_5g):
    pass


Phone1 = Phone2023()
Phone1.check_4g()
Phone1.check_5g()

多继承当中,如果父类拥有两个或以上的同名属性,那么按照先继承的属性(函数,)来运行。

pass

值得关注的是pass这个关键字:占位语句,空的意思

复写和使用父类成员

复写样例:实际上就是在子类中进行重新定义

class Phone :
    producer = "ISN"
    def check_5g(self):
        print("5g没有打开")

class Myphone(Phone) :
    producer = "III"
    def check_5g(self):
        print("5g打开了")

phone = Myphone()
print(phone.producer)
phone.check_5g()

输出结果:

在这里插入图片描述
调用父类成员
方法一:
父类名.成员变量
父类名.成员方法
方法二:
super().成员变量
super().成员方法

样例:

class Phone :
    producer = "ISN"
    def check_5g(self):
        print("5g没有打开")

class Myphone(Phone) :
    producer = "III"
    def check_5g(self):
        # 方法一
        print(Phone.producer)
        # 方法二
        super().check_5g()
        print("5g打开了")

phone = Myphone()
print(phone.producer)
phone.check_5g()

输出结果:
在这里插入图片描述

类型注解

变量的类型注解

语法1:
变量:类型
语法2:
变量 # type :类型

样例:

# 方法一:
my_list :list[int,str,float] =[1,'12',0.0]
# 方法二:
my_tuple = {1,'12',0.0} # type: tuple[int,str,float]

类型注解只是提示性的,非决定性的,数据类型和注解类型不匹配也不会导致错误。

函数(方法)的类型注解

对形参进行类型注解:

样例:

def add(x:int,y:int):
    return x+y

对函数返回值进行类型注解:

样例:

def add(x,y) ->int :
    return x+y

类型注解只是提示性的,非决定性的,数据类型和注解类型不匹配也不会导致错误。

Union类型

Union实际上就是定义一个联合的类型注解。

Union的使用:
导包:
from typing import Union
使用:
Union[类型·····类型]

样例:

from typing import Union
def add(x,y) ->Union[int,str] :
    return x+y

此函数代表着函数返回的类型要么是int要么是str,二者都有可能。

多态

关于多态的理解:

class Animal :
    def speak(self):
        pass

class Cat(Animal):
    def speak(self):
        print("喵喵喵")

class Dog(Animal):
    def speak(self):
        print("汪汪汪")

def make_noise(animal:Animal):
    animal.speak()

cat =Cat()
dog =Dog()

make_noise(cat)
make_noise(dog)

小总结一下,所谓多态实际上就是完成某个行为时,不同的对象会得到不同的状态。
即同样的行为(make_noise函数),传入的对象不同,得到不同的状态。

而这种思想常用于抽象类(也可以称之为接口)当中:
抽象类:含有抽象方法的类。
抽象方法:方法体时空实现(pass)称之为抽象方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/159099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谷粒商城项目之高级篇笔记(一)

目录1 商城业务1.1 商品上架1.1.1 商品Mapping1.1.2 建立product索引1.1.3 上架细节1.1.4 数据一致性1.1.5 代码实现1&#xff09;先查库存&#xff08;商品微服务远程调用库存微服务&#xff09;2&#xff09;商品上架&#xff0c;保存到es中&#xff08;商品微服务远程调用搜…

小波分析——5.使用小波对信号去噪以及重构

文章目录假设有一个原始信号我们在前面的内容中已经介绍过&#xff0c;小波是什么&#xff0c;小波是如何对信号进行分解&#xff0c;以及小波对信号成分是如何分析的&#xff0c;今天在这篇文章&#xff0c;也是整个小波分析最后一个章节里&#xff0c;我们来谈谈小波最重要的…

Java获取上传的文件大小并且转换对文件大小进行单位转化

前言 今天产品提出来一个需求&#xff0c;上传文件的时候要记录文件的大小&#xff0c;并且保存到数据库里面。 正好借着这个机会&#xff0c;分享下对文件大小进行单位转化的一个方法。 获取文件大小(原字节)。 一般和前后端进行文件交互&#xff0c;都是通过MultipartFil…

Spring Boot常用注解,thymeleaf,数据提交

前言 Spring Boot主要解决的是在微服务的架构下简化配置&#xff08;快速有效&#xff09;&#xff0c;前后端分离&#xff0c;快速开发。提供了快速启动&#xff0c;内嵌容器化web项目&#xff0c;开箱即用提供了默认配置&#xff0c;没有繁琐的xml配置和冗余代码。本文见简单…

GAMES101-图形学入门 LEC3: TRANSFORMATION-2D

文章目录上节内容回顾&#xff1a;本节知识概要Why study transformationModeling 模型变换Viewing 视图变换2D transformations 二维变换ScaleUniform 均匀缩放Non-Uniform 非均匀缩放Reflection Matrix 反射矩阵shear 切变rotate 旋转&#xff0c;默认绕&#xff08;0,0&…

Wetool 一款高效免费的微信社群管理工具,检查单向好友,自动回复、群发

这是一款高效免费的微信社群管理工具&#xff0c;目前功能主要有客服、机器人、单删查询、自动接受好友、以及群管理的一些工具下面放一下软件功能截图需要注意的是开启此工具需要下载旧版本的微信&#xff0c;这个在软件安装启动页面会自动进行下载。单删改查功能这个功能适用…

python基础篇之循环语句(附加选车牌号小系统开发)

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a;lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm1000.2115.3001.5343 哔哩哔哩欢迎关注&…

【CocosCreator入门】CocosCreator项目创建 | 面板介绍

本文进行创建项目流程和编辑器界面的介绍&#xff0c;熟悉组成编辑器的各个面板、菜单和功能按钮。 目录 一、CocosCreator创建项目 二、CocosCreator编辑器界面 2.1层级管理器 2.1.1界面介绍 2.1.2层级管理器操作 2.2资源管理器&#xff08;Assets&#xff09; 2.2.1界…

asp.net c#大型综合管理系统源码 OA+HR+CRM综合办公管理系统源码

分享一套大型协同办公&#xff08;OAHRCRM&#xff09;系统源码。 本系统是强大构建系统&#xff0c;为OA办公系统HR人力资源管理系统CRM客户关系管理系统集合而成&#xff0c;人员可以单点登入多个系统完成自己的作业&#xff0c;超方便实用。全套源代码提供&#xff0c;不封…

System Extract 步骤

纲要&#xff1a; 把Composition下的SWC分配到System Description 描述的CAN网络的的ECU上。 System Extract目录 1. Create System Extract 2. Map SWC to ECU instance 3. Maping System Signal to Data Element 4. Create System Extract 1. Create System Extract Ri…

SAP 开发测试生产环境的简单介绍

客户端&#xff08;即Client),是SAP组织架构里最高层的组织单元&#xff0c;所有数据&#xff0c;包括静态数据&#xff08;科目、客户、供应商、物料、资产等&#xff09;、业务数据&#xff08;采购订单、销售订单、生产订单、维修订单等&#xff09;都会归属到各个Client下。…

Kettle用法之Windows定时任务

1 概述 前文提到了kettle的定时任务计划&#xff0c;但这个任务需要开启kettle&#xff0c;本文将利用windows的任务计划实现kettle的定时任务。 2 实现方法 需要编写bat文件&#xff0c;然后windows的任务计划调用执行。 3 操作步骤 3.1 第1步 启动spoon,新建一个作业&#xf…

【Linux】编译器 - gcc 函数库

目录 一、背景知识 二、gcc如何执行 1、预处理 2、编译 3、汇编 4、链接 三、函数库 1、初识函数库 2、动静态库 2.1、动态库 2.2、静态库 2.3、动静态库的选择 一、背景知识 使用 vim 编辑器完成代码书写之后&#xff0c;我们需要使用 Linux 中的编译器 gcc 来对…

vLive虚拟直播,助力企业打造线上云年会

2023年农历春节临近&#xff0c;各大企业都纷纷开始筹备年会&#xff0c;面临员工分布各地无法同时参与、内容单一缺乏参与感等局限性&#xff0c;越来越多的企业选择做一场云年会替代传统线下年会。近日&#xff0c;蓝海彤翔集团举办2022年终总结表彰暨2023业务发展规划大会&a…

Transcational与Synchronized或Lock搭配使用导致并发问题

在多线程的情况下&#xff0c;我们经常会用到synchronized或者Lock来保证我们的线程安全。 但是当碰到Transcational之后又会碰撞出什么火花呢&#xff1f; 相信我&#xff0c;看完之后&#xff0c;你一定不会亏 首先回顾一下小知识点&#xff1a; 基于Transactional注解的是…

4.R语言【dplyr包】使用方法

b站课程视频链接&#xff1a; https://www.bilibili.com/video/BV19x411X7C6?p1 腾讯课堂(最新&#xff0c;但是要花钱&#xff0c;我花99&#x1f622;&#x1f622;元买了&#xff0c;感觉讲的没问题&#xff0c;就是知识点结构有点乱&#xff0c;有点废话&#xff09;&…

黑马程序员Java教程学习笔记(二)

学习视频&#xff1a;https://www.bilibili.com/video/BV1Cv411372m 如侵权&#xff0c;请私信联系本人删除 文章目录黑马程序员Java学习笔记&#xff08;二&#xff09;数组概述数组定义方式一、访问、注意事项数组定义方式二&#xff0c;元素默认值规则数组遍历、元素求和数组…

HTML5+CSS3小实例:文本背景扫光效果

实例:文本背景扫光效果 技术栈:HTML+CSS 效果: 源码: 【html】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content="width…

【OpenGL学习】OpenGL环境配置

OpenGL环境配置 为了能够定义OpenGL上下文和创建用于显示的窗口&#xff0c;我们首先需要配置一些库来帮助我们实现&#xff0c;当前比较流行的用于创建窗口的库有GLUT&#xff0c;SDL&#xff0c;SFML和GLFW&#xff0c;其中网上的大部分教程使用的都是GLFW&#xff0c;因此我…

聊聊Pytorch2.0的新特性

一句话概括下&#xff0c;Pytorch2.0的功能介绍核心就是&#xff1a;torch.compile opt_module torch.compile(module)一行代码就能优化你的模型&#xff0c;优化后的模型和往常使用方式一样 速度会提升&#xff0c;比较重要的一点是&#xff1a;可以用于训练或者部署&#…