三十三、Python基础语法(面向对象其他语法-下)

一、属性划分

1.类属性

类属性:类属性就是类对象具有的属性,一般写法在类内部、方法的外部定义的变量,就是类属性,类属性在内存中只有一份。可以通过类名直接访问,也可通过实例访问。

class Circle:# 类属性,定义圆周率pi = 3.14159def __init__(self, radius):self.radius = radiusdef calculate_area(self):# 使用类属性计算圆的面积return Circle.pi * self.radius * self.radiusdef calculate_circumference(self):# 使用类属性计算圆的周长return 2 * Circle.pi * self.radius# 创建两个圆对象
circle1 = Circle(5)
circle2 = Circle(8)print(f"圆 1 的面积:{circle1.calculate_area()}")
print(f"圆 2 的面积:{circle2.calculate_area()}")print(f"圆 1 的周长:{circle1.calculate_circumference()}")
print(f"圆 2 的周长:{circle2.calculate_circumference()}")

2.实例属性

实例属性:实例属性就是对象具有的属性,在类中 的 init 方法中, 使用 self 定义的属性,每个实例对象中都存在一份自己的属性信息。

class Person:def __init__(self, name, age):self.name = name  # 实例属性 nameself.age = age    # 实例属性 agedef introduce(self):return f"我是{self.name},今年{self.age}岁。"# 创建两个 Person 类的实例
person1 = Person("小明", 20)
person2 = Person("小红", 22)print(person1.introduce())
print(person2.introduce())

如何判断一个属性是定义实例属性还是类属性?

基本上所有的属性都实例属性,实例属性描述每个实例对象的特有信息,类属性描述的是整个类共有信息。

二、方法的划分

1.实例方法

直接使用def关键字定义的方法就是实例对象方法(实例方法),调用:实例对象.方法名()

class Dog:def __init__(self, name):self.name = namedef bark(self):# 实例方法,打印狗狗的叫声和名字print(f"{self.name}:汪汪!")# 创建一个 Dog 类的实例
my_dog = Dog("小白")# 调用实例方法
my_dog.bark()

2.类方法

类方法:在 def 的上方使用装饰器 @classmethod 装饰的方法,调用:类名.方法名()、对象.方法名()

class Circle:pi = 3.14159def __init__(self, radius):self.radius = radius@classmethoddef from_diameter(cls, diameter):# 类方法,通过直径创建 Circle 实例return cls(diameter / 2)def area(self):return Circle.pi * self.radius * self.radius# 使用类方法创建实例
circle1 = Circle.from_diameter(10)
print(circle1.radius)print(circle1.area())

3.静态方法

静态方法:在 def 的上方,使用装饰器 @staticmethod 装饰的方法,静态方法,它不依赖于类的实例,也不访问类属性或实例属性。它只是一个与类相关的工具方法,可以直接通过类名来调用。

class MathUtils:@staticmethoddef add(a, b):# 静态方法,进行简单的加法运算return a + bresult = MathUtils.add(5, 3)
print(result)  # 输出 8

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

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

相关文章

el-message 同时弹出多个【改写el-message】

因为服务断开了 但是拦截器里对每个失败的接口都做了message弹出,因此改写el-message逻辑,仅展示一个同等类型的message窗体 1. 新建 /utils/rewriteElMessage.js /*** Event 解决 el-message 同类型重复打开的问题* description:* author: mhf* time:…

SSM宿舍管理系统-计算机毕业设计源码03732

目 录 1 绪论 1.1研究背景 1.2开发现状 1.3研究内容 1.4论文结构与章节安排 2 宿舍管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据流程 3.3.2 业务流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系统用例分析 2.5本章小结 3 …

淘宝商品描述,一键“爬”回家 —— Java爬虫的奇妙冒险

引言: 在这个信息爆炸的时代,我们每天都在被各种商品信息轰炸。你是否曾想过,如何能快速、准确地获取淘宝商品的描述信息?今天,就让我们一起开启一段Java爬虫的奇妙冒险,探索如何通过代码一键“爬”取淘宝…

线性代数:Matrix2x2和Matrix3x3

今天整理自己的框架代码,将Matrix2x2和Matrix3x3给扩展了一下,发现网上unity数学计算相关挺少的,所以记录一下。 首先扩展Matrix2x2: using System.Collections; using System.Collections.Generic; using Unity.Mathemati…

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤: 一、环境准备 机器配置 确保两台机器(假设为服务器 A 和服务器 B)能够互相通信,例如它们在同一个局域网内,并且开放了 MySQL 通信所需的端口(默认是 …

【stm32】RTC时钟的介绍与使用

RTC时钟的介绍与使用 一、时间戳1、Unix时间戳2、UTC/GMT3、时间戳转换 二、BKP简介及代码编写1、BKP简介2、BKP基本结构3、BKP库函数介绍:4、程序编写: 三、RTC简介及代码编写1、RTC简介2、RTC框图2、RTC基本结构3、RTC相关库函数介绍:4、程…

界面控件DevExpress JS ASP.NET Core v24.1亮点 - 支持Angular 18

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac&#xff0c…

如何检索 LINEMOD 数据集的相机内参

简介 BOP (Benchmark for 6D Object Pose Estimation) 是一个专为6D物体姿态估计而设计的基准测试平台。它为研究人员提供了多种数据集,以帮助评估和比较物体识别和姿态估计算法的性能。官方网站是 BOP,你可以在这里找到丰富的资源和信息。 检索 LINEM…

机器学习与数据挖掘_使用梯度下降法训练线性回归模型

目录 实验内容 实验步骤 1. 导入必要的库 2. 加载数据并绘制散点图 3. 设置模型的超参数 4. 实现梯度下降算法 5. 打印训练后的参数和损失值 6. 绘制损失函数随迭代次数的变化图 7. 绘制线性回归拟合曲线 8. 基于训练好的模型进行新样本预测 实验代码 实验结果 实验…

web——sqliabs靶场——第一关

今天开始搞这个靶场,从小白开始一点点学习,加油!!!! 1.搭建靶场 注意点:1.php的版本问题,要用老版本 2.小p要先改数据库的密码,否则一直显示链接不上数据库 2.第一道题&#xff0…

Xamarin 实现播放视频 MP4

我的想法是在App启动时播放一段视频,实现方式如下: 准备一个视频: Logo.mp4 添加到资源中:Assets 然后将资源设置为 AndroidAsset 启动时,将资源文件拷贝到程序目录的files下: protected override void On…

4070显卡只要一毛钱?这个双十一太疯狂了

2024年双十一大战正酣,各大商家使尽浑身解数,奇招频出,真是让人看得目瞪口呆。每日口令红包、攒火力值领裂变红包、限时抢免定金红包……还有各类满减和打折优惠活动,玩法千奇百怪,算来算去索性放弃,真是没…

C++优选算法四 前缀和

前缀和算法是一种常用的优化技术,主要用于加速某些涉及连续子数组或子序列求和的问题。 一、定义与原理 定义:前缀和是指数组中某个位置之前(包括该位置)所有元素的和。前缀和算法则是通过提前计算并存储这些前缀和,…

yum安装指定版本Redis

一,yum安装Redis 1,列出可用的redis版本 yum --showduplicates list redis 只有5.0.3.5版本,如果已经满足需求,可以直接安装 2,安装redis yum -y install 如果显示installed, 说明安装成功了 也可以通过…

DAY21|二叉树Part08|LeetCode: 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

目录 LeetCode: 669. 修剪二叉搜索树 基本思路 C代码 LeetCode: 108.将有序数组转换为二叉搜索树 基本思路 C代码 LeetCode: 538.把二叉搜索树转换为累加树 基本思路 C代码 LeetCode: 669. 修剪二叉搜索树 力扣代码链接 文字讲解:LeetCode: 669. 修剪二叉搜…

HarmonyOS基础:鸿蒙系统组件导航Navigation

大家好!我是黑臂麒麟(起名原因:一个出生全右臂自带纹身的高质量程序员😏),也是一位6(约2个半坤年)的前端; 学习如像练武功一样,理论和实践要相结合&#xff0…

​Houdini云渲染如何使用?如何让一个镜头使用成百上千台机器渲染,提高渲染效率

​Houdini云渲染如何使用?如何让一个镜头使用成百上千台机器渲染,提高渲染效率呢,最简单的教程来了! 第一步:云渲码6666注册成都渲染101,并且下载渲染101客户端 客户端是上传下载的工具,将文件…

如何使用Varjo直接观看Blender内容

最近,开源的3D建模程序Blender为Varjo提供了出色的OpenXR支持,包括四视图和凹进渲染扩展。但是在Blender中,默认不启用VR场景检查。要开始使用VR场景检查,只需遵循以下步骤: 1. 下载并安装Blender 2.启用Blender VR场景…

linux 安装anaconda3

1.下载 使用repo镜像网址下载对应安装包 右击获取下载地址,使用终端下载 wget https://repo.anaconda.com/archive/Anaconda3-2024.02-1-Linux-x86_64.sh2.安装 使用以下命令可直接指定位置 bash Anaconda3-2024.02-1-Linux-x86_64.sh -b -p /home/anaconda3也…

JavaScript。—关于语法基础的理解—

一、程序控制语句 JavaScript 提供了 if 、if else 和 switch 3种条件语句&#xff0c;条件语句也可以嵌套。 &#xff08;一&#xff09;、条件语句 1、单向判断 &#xff1a; if... &#xff08;1&#xff09;概述 < if >元素用于在判断该语句是否满足特定条…