【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,一经查实,立即删除!

相关文章

头歌-机器学习 第14次实验 主成分分析PCA

第1关:维数灾难与降维 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握维数灾难与降维的相关基础知识。 维数灾难 在机器学习中,我们不仅需要学习怎样进行分类、回归或者聚类,我们更要学习怎样对数据进行更好的…

如何在公网环境远程管理内网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…

深度学习八股文

Bert旨在通过联合左侧和右侧的上下文,从未标记文本中预训练出一个深度双向表示模型。因此,BERT可以通过增加一个额外的输出层来进行微调,就可以达到为广泛的任务创建State-of-the-arts 模型的效果,比如QA、语言推理任务。Bert的构…

【ROS2笔记二】使用colcon构建ROS2工作空间

2.使用colcon构建ROS2工作空间 2.1一个构建的示例 在ROS1中,我们使用catkin_make 、catkin_tools、和catkin_make_isolated作为ROS的构建工具,但在ROS2中,我们使用colcon来作为构建工具,具体的原因可以参考该文档A universal bu…

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

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

mashgrid函数到底有啥作用?好处究竟在哪?

在用matlab的时候经常看到mashgrid函数这个函数,但是即使看过很多遍其底层源码,也难以理解他到底好在哪,有啥具体作用。今天终于搞明白了,现在记录一下。 mashgrid函数到底有啥作用?好处究竟在哪? 先说结…

LeetCode-热题100:32. 最长有效括号

题目描述 给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入: s “(()” 输出: 2 解释: 最长有效括号子串是 “()” 示例 2: 输入&…

【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;我们都喜欢构建一…

理解 Nginx 的多站点配置:为每个网站单独配置

Nginx 是一个高性能的 Web 服务器&#xff0c;广泛用于托管和管理网站。它之所以受欢迎&#xff0c;部分原因在于它的灵活性和强大的配置能力。特别是对于管理多个网站&#xff0c;Nginx 提供了一种高效且组织良好的方法。让我们逐步了解如何使用 Nginx 配置多个网站&#xff0…

【Android】【root remount】【2】如何判断设备是否remount

前言 高版本的android设备&#xff0c;在remount之后&#xff0c;如果再进行ota升级&#xff0c;会产生异常&#xff0c;从而无法升级成功。 如何判断设备是否remount 当前已android 10 平台为例 当我们执行 adb remount 时&#xff0c;系统调用会调用到system/core/adb/dae…

1024编程

关于编程和信息学&#xff0c;常常有一些讨论&#xff1a;“课内数学好没用&#xff0c;小学奥数没学过不能先学信息学”。这个说法有道理吗&#xff1f; 其实&#xff0c;“小学奥数”不是必须&#xff0c;只要课内语文、数学学得不错&#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…

西电B测介绍

西电B测是西安电子科技大学&#xff08;西电&#xff09;的一项重要的实验教学环节&#xff0c;主要涉及通信系统和计算机网络的综合设计实验。这一测试旨在加深学生对通信原理和计算机网络知识的理解&#xff0c;提升他们的实践能力和团队协作精神。以下是对西电B测的详细介绍…

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

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