【Python】类和对象

类和对象

  • 构造方法
  • 封装
  • 继承
    • 多继承
  • 多态

类: 类是一个模板,描述一类对象的行为和状态。 有了模板我们就可以根据这个模板创建具体的对象。
对象: 对象是类的一个具体实例,有状态和行为。

class 类名称:  类的属性类的行为
# 其中 class是关键字,表示要定义类
# 类的属性,即定义在类中的变量
#  类的行为,即定义在类中的函数

例如:

# 创建Student类
class Student:name = Noneage = None# 此处self表示类对象本身,若要访问类的成员变量时,需要通过self. # 例如 self.name,self在形参列表中,但是不占用具体的参数位置# 调用方法时可不用管,例如:stu.sayHi()def sayHi(self):print(f"Hello, 我的名字是{self.name}")# 实例化一个 Student 对象
stu = Student()
stu.name = "张三"
stu.age = 20
stu.sayHi()

运行结果:
在这里插入图片描述

构造方法

当类里的属性太多时,如果再通过 对象.属性 来赋值,会略显繁琐,因此我们可以使用 构造方法 __init__() 来完成,创建对象时,会将传入的参数自动传递给构造方法使用,构造方法会自动执行。例如:

class Student:
# 使用构造方法时,类里的属性可以省略,self. 会自动定义name = Noneage = None# __init__ 两边都是两个下划线def __init__(self, name, age):self.name = nameself.age = ageprint("使用构造方法初始化一个对象")def sayHi(self):print(f"Hello, 我的名字是{self.name}")stu1 = Student("张三",22)
stu1.sayHi()

运行结果:
在这里插入图片描述


__str()__,类似 Java 里的 toString() 方法:

在这里插入图片描述

封装

封装就是将一系列属性或方法给隐藏起来,外部对象不能直接使用,就像手机里的各种软硬件,无需知道他们如何实现,他们内部之间可能互相调用,但外部需要通过封装好的接口来使用。
用两个下划线开头,声明该方法为私有方法,属性为私有属性,只能在类的内部调用,不能在类的外部调用。例如:

class Student:__name = None__age = None # 私有变量sex = None  # 公有变量def __init__(self, name, age, sex):self.__name = nameself.__age = ageself.sex = sexdef __say(self):print("Hello My name is " + self.__name)stu1 = Student("张三",22,"男")
print(stu1.sex) # 可以访问
print(stu1.__age)   # 报错,不能访问

在这里插入图片描述

但是可以调用公有方法:

在这里插入图片描述

继承

当一个新的类和一个已有的类 功能属性 差不多时,我们就可以使用继承,如 类B 继承了 类A,那么 类B 就拥有了和 类A 一样的属性方法,类A 保持不变,这样我们就无需再重新设计 类B 了。例如各大手机厂商,大多情况下只会在上一代手机基础上增加一些新功能,而不是重新设计外表功能等。继承格式:

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

例如:

class Phone:name = "一代手机"def __init__(self, name):self.name = namedef message(self):print(f"{self.name}可以发送短信")
class Xiaomi(Phone):def call(self):print(f"{self.name}可以打电话")
class Huawei(Phone):def call(self):print(f"{self.name}可以发视频")xiaomi = Xiaomi("小米")
# 一代手机功能
xiaomi.message()
# 自己的功能
xiaomi.call()Huawei = Huawei("华为")
Huawei.message()
Huawei.call()

在这里插入图片描述

若对父类功能不满意,也可以覆盖父类的方法:

class Phone:name = "一代手机"def __init__(self, name):self.name = namedef message(self):print(f"{self.name} 可以发送短信")class Phone2(Phone):# 重写父类方法def message(self):print(f"{self.name} 不仅可以发送短信,还可以发邮箱")phone = Phone2("二代手机")
phone.message()

在这里插入图片描述
当然也可以两个同时使用:
在这里插入图片描述

多继承

可以继承多个类。

class 类名(父类名1,父类名2...:类内容体
class Phone:name = "一代手机"def __init__(self, name):self.name = namedef message(self):print(f"{self.name} 可以发送短信")
class Computer:def __init__(self, name):self.name = namedef office(self):print(f"{self.name} 可以办公")class Pingban(Phone,Computer):
# 继承了 Phone和 Computer,所以拥有 Phone类 和 computer类的方法和属性def game(self):print(f"{self.name} 可以打游戏")pingban = Pingban("平板")
pingban.message()
pingban.office()
pingban.game()

在这里插入图片描述

多态

多态 指的是多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。具体请看例子:

class Animal:def __init__(self, name):self.name = namedef speak(self):pass  # 不想实现具体方法可以使用 pass关键字def eat(self):passclass Dog(Animal):def speak(self):print(f"{self.name} 汪汪叫")def eat(self):print(f"{self.name} 吃骨头")class Cat(Animal):def speak(self):print(f"{self.name} 喵喵叫")def eat(self):print(f"{self.name} 吃鱼肉")def pet(animal):animal.speak()animal.eat()cat = Cat("小猫")
dog = Dog("小狗")
pet(cat)
print("=========")
pet(dog)

在这里插入图片描述

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

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

相关文章

如何在公网环境远程管理内网Windows系统部署的MongoDB数据库

文章目录 前言1. 安装数据库2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射2.3 测试随机公网地址远程连接 3. 配置固定TCP端口地址3.1 保留一个固定的公网TCP端口地址3.2 配置固定公网TCP端口地址3.3 测试固定地址公网远程访问 前言 MongoDB是一个基于分布式文件存储的数…

阿里面试总结 一

写了这些还是不够完整,阿里 字节 卷进去加班!奥利给 ThreadLocal 线程变量存放在当前线程变量中,线程上下文中,set将变量添加到threadLocals变量中 Thread类中定义了两个ThreadLocalMap类型变量threadLocals、inheritableThrea…

数据知识产权登记前为何需要区块链存证_存储在国外的数据可以做数据资产登记证申请码

各地已公布的管理办法中,均把“数据区块链存证或公证”证明材料做为向各地数据知识产权登记部门提交登记申请表中必要材料之一。北京市数据知识产权登记管理办法要求:有下列情况之一的,不予登记:(三)登记前…

【SpringBoot】-- mapstruct进行类型转换时Converter实现类不能自动生成代码问题解决

问题描述 我的问题如下&#xff1a; 应该在红色区域生成对应的转换细节&#xff0c;但是这里只返回了一个空对象 问题解决 加入lombok-mapstruct-binding依赖,也要注意依赖引用顺序问题 <dependency><groupId>org.projectlombok</groupId><artifactId&…

uniapp项目引入组件

1、在项目新建文件uni_modules 2、通过uniapp官网查找组件 uni-app官网 3、下载组件 4、将下载好的组件放到步骤1创建的uni_modules目录下 5、在hbuilderX中重新运行小程序

LangFriend - 一款Long-Term Memory 的日历应用

文章目录 学术工作公司为什么要使用日记应用程序&#xff1f;定制总结 本文翻译整理自&#xff1a; https://blog.langchain.dev/langfriend/ (发布于2024 年 3 月 28 日) 在LangChain我们最感兴趣的概念之一就是内存。 每当我们对一个概念感兴趣时&#xff0c;我们都喜欢构建一…

子域名是什么?有什么作用?

在互联网世界中&#xff0c;域名是我们访问网站的关键。每一个公司的网站都需要拥有自己的域名&#xff0c;其中有些大型公司的网站还不止一个域名&#xff0c;除了主域名外还拥有子域名。有些人感到非常困惑&#xff0c;不知道子域名是什么。其实子域名也就是平时所说的二级域…

不可错过的3D建模素材网站,让设计更加丰富多彩!

3D建模已经渗透到了各个行业和领域&#xff0c;从游戏设计、室内设计到建筑设计&#xff0c;3D模型的使用越来越广泛。然而&#xff0c;创建出优秀的3D模型就需要大量的优质3D建模素材。幸运的是&#xff0c;有一些网站提供了大量的高质量3D建模素材&#xff0c;这些都是我们设…

C语言 | Leetcode C语言题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; char pairs(char a) {if (a }) return {;if (a ]) return [;if (a )) return (;return 0; }bool isValid(char* s) {int n strlen(s);if (n % 2 1) {return false;}int stk[n 1], top 0;for (int i 0; i < n; i) {char ch pair…

AI 对话完善【人工智能】

AI 对话【人工智能】 前言版权开源推荐AI 对话v0版本&#xff1a;基础v1版本&#xff1a;对话数据表tag.jsTagController v2版本&#xff1a;回复中textarea.jsChatController v3版本&#xff1a;流式输出chatLast.jsChatController v4版本&#xff1a;多轮对话QianfanUtilChat…

c++的友元函数,详细笔记,细说三种友元用法

解释友元 友元用通俗易懂的话来说&#xff0c;就是&#xff1a;当有人来到你家里&#xff0c;他就只能呆在客厅里面&#xff0c;你是不可能让他来到你的卧室之中的。但是如果这个人是你的朋友&#xff0c;那么你是默许他可以进入你的卧室的。 此时呢&#xff1f;我告诉你&…

SpringBoot+Vue,轻松实现网页版人脸登录与精准识别

目录 1、技术介绍 2、技术原理 2.1、人脸检测 ①参考模板法 ②人脸规则法 2.2、人脸跟踪 2.3、人脸比对 ①特征向量法 ②面纹模板法 识别过程 案例 一、springboot后端项目 1&#xff0c;拉取项目后&#xff0c;导入相关依赖jar包 2&#xff0c;执行sql文件夹下面…

智能运维场景 | 科技风险预警,能实现到什么程度?

[ 原作者&#xff1a;擎创夏洛克&#xff0c;本文略做了节选和改编 ] 每次一说到“风险预警”&#xff0c;就会有客户问我们能做怎样的风险预警。实际上在智能运维厂商来说&#xff0c;此风险非彼风险&#xff0c;不是能做银行的业务上的风险预警&#xff08;比如贷款风险等&a…

golang的引用和非引用总结

目录 概述 一、基本概念 指针类型&#xff08;Pointer type&#xff09; 非引用类型&#xff08;值类型&#xff09; 引用类型&#xff08;Reference Types&#xff09; 解引用&#xff08;dereference&#xff09; 二、引用类型和非引用类型的区别 三、golang数据类型…

深度学习500问——Chapter07:生成对抗网络(GAN)(1)

文章目录 7.1 GAN基本概念 7.1.1 如何通俗理解GAN 7.1.2 GAN的形式化表示 7.1.3 GAN的目标函数是什么 7.1.4 GAN的目标函数和交叉熵有什么区别 7.1.5 GAN的Loss为什么降不下去 7.1.6 生成式模型、判别式模型的区别 7.1.7 什么是mode collapsing 7.1.8 如何解决mode collapsing …

论文| Convolutional Neural Network-based Place Recognition - 2014

2014-Convolutional Neural Network-based Place Recognition

PID c++算法学习和实现

原理图&#xff1a; &#xff08;1&#xff09;位置式PID 是1&#xff1a;当前系统的实际位置&#xff0c;与你想要达到的预期位置的偏差&#xff0c; 2&#xff1a;进行PID控制,误差会一直累加&#xff0c;会使当前输出与过去的所有输入相关&#xff0c;输入uk出错&#xff…

为什么别人能拿到大厂offer?你应该明白这些java面试技巧!

言简意赅的说明自己的工作时间&#xff0c;擅长技术栈和自己的工作预期。 注意准备两份自我介绍&#xff0c;一个是跟面试官说的&#xff0c;一个是跟HR说的。 项目经验介绍 选一个自己感觉是最成功的&#xff0c;而且还是最有把握的项目&#xff0c;讲给面试官。 简单说下…

Lvgl9 WindowsSimulator Visual Studio2017

因为在操作过程中遇到了一些错误&#xff0c;所以将操作及解决问题的过程记录下来。 一、下载lv_port_pc_visual_studio github链接:GitHub - lvgl/lv_port_pc_visual_studio: Visual Studio projects for LVGL embedded graphics library. Recommended on Windows. Linux su…

Linux系统使用Docker部署MeterSphere并实现公网访问本地测试平台

文章目录 前言1. 安装MeterSphere2. 本地访问MeterSphere3. 安装 cpolar内网穿透软件4. 配置MeterSphere公网访问地址5. 公网远程访问MeterSphere6. 固定MeterSphere公网地址 前言 MeterSphere 是一站式开源持续测试平台, 涵盖测试跟踪、接口测试、UI 测试和性能测试等功能&am…