Python实例属性和实例方法_类对象、类属性、类方法、静态方法

news2024/11/21 2:36:11

一、实例属性

实例属性是从属于实例对象的属性,也称为“实例变量”。他的使用有如下几个要点:

  1. 实例属性一般在__init__()方法中通过如下代码定义:

    self.实例属性名 = 初始值

  2. 在本类的其他实例方法中,也是通过self进行访问: self.实例属性名

  3. 创建实例对象后,通过实例对象访问:

    obj01 = 类名() #创建和初始化对象,调用__init__()初始化属性

    obj01.实例属性名 = 值 #可以给已有属性赋值,也可以新加属性

class Student:
  def __init__(self,name,score):
    self.name = name    #增加name属性
    self.score = score  #增加score属性
​
  def say_score(self):
    self.age = 18   #增加age属性
    print("{0}的分数是{1}".format(self.name,self.score))
​
s1 = Student("张三",80)
s1.say_score()
print(s1.age)
s1.salary = 3000    #s1对象增加salary属性
​
s2 = Student("李四",90)
s2.say_score()
print(s2.age)

二、实例方法

实例方法是从属于实例对象的方法。实例方法的定义格式如下:

def 方法名(self [, 形参列表]):
    函数体

 

方法的调用格式如下: 对象.方法名([实参列表])

要点:

  1. 定义实例方法时,第一个参数必须为self。和前面一样,self指当前的实例对象。
  2. 调用实例方法时,不需要也不能给self传参。self由解释器自动传参

2.1、函数和方法的区别

  1. 都是用来完成一个功能的语句块,本质一样。
  2. 方法调用时,通过对象来调用。方法从属于特定实例对象,普通函数没有这个特点
  3. 直观上看,方法定义时需要传递self,函数不需要

2.2、实例对象的方法调用本质

2.3、其他操作

  1. dir(obj)可以获得对象的所有属性、方法
  2. obj.__dict__ 对象的属性字典
  3. pass 空语句
  4. isinstance(对象,类型) 判断“对象”是不是“指定类型”

三、类对象

我们在前面讲的类定义格式中,class 类名:。实际上,当解释器执行class语句时,就会创建一个类对象

【操作】测试类对象的生成

class Student:
  pass  #空语句
​
print(type(Student))
print(id(Student))
​
Stu2 = Student
s1 = Stu2()
print(s1)

执行结果如下:

<class 'type'>
51686328
<__main__.Student object at 0x0000000002B5FDD8>

我们可以看到实际上生成了一个变量名就是类名Student的对象。我们通过赋值给新变量Stu2,也能实现相关的调用。说明,确实创建了“类对象”。

四、类属性

类属性是从属于“类对象”的属性,也称为“类变量”。由于,类属性从属于类对象,可以被所有实例对象共享。

类属性的定义方式:

class 类名:
    类变量名= 初始值

在类中或者类的外面,我们可以通过:类名.类变量名来读写

4.1、内存分析实例对象和类对象创建过程(重要)

我们以下面代码为例,分析整个创建过程,让大家对面向对象概念掌握更加深刻:

class Student:
  company = "ABC" # 类属性
  count = 0 # 类属性
​
  def __init__(self, name, score):
    self.name = name # 实例属性
    self.score = score
    Student.count = Student.count + 1
​
  def say_score(self): # 实例方法
    print("我的公司是:", Student.company)
    print(self.name, '的分数是:', self.score)
​
s1 = Student('高淇', 80) # s1是实例对象,自动调用__init__()方法
s2 = Student('张三', 70)
s1.say_score()
print('一共创建{0}个Student对象'.format(Student.count))

五、类方法

类方法是从属于“类对象”的方法。类方法通过装饰器@classmethod来定义,格式如下:

@classmethod
def 类方法名(cls  [,形参列表]) :
    方法体

要点如下:

  1. @classmethod必须位于方法上面一行
  2. 第一个cls必须有;cls指的就是“类对象”本身
  3. 调用类方法格式:类名.类方法名(参数列表)。 参数列表中,不需要也不能给cls传值
  4. 类方法中访问实例属性和实例方法会导致错误
  5. 子类继承父类方法时,传入cls是子类对象,而非父类对象(⚠️讲完继承再说)

【操作】类方法使用测试

class Student:
  company = "ABC"   #类属性
  
  @classmethod
  def printCompany(cls):
    print(cls.company)
  
Student.printCompany()

六、静态方法

Python中允许定义与“类对象”无关的方法,称为“静态方法”。

“静态方法”和在模块中定义普通函数没有区别,只不过“静态方法”放到了“类的名字空间里面”,需要通过“类调用”。

静态方法通过装饰器@staticmethod来定义,格式如下:

@staticmethod
def 静态方法名([形参列表]) :
    方法体

要点如下:

  1. @staticmethod必须位于方法上面一行
  2. 调用静态方法格式:类名.静态方法名(参数列表)
  3. 静态方法中访问实例属性和实例方法会导致错误

【操作】静态方法使用测试

class Student:
  company = "ABC" # 类属性
​
  @staticmethod
  def add(a, b): # 静态方法
    print("{0}+{1}={2}".format(a,b,(a+b)))
    return a+b
​
Student.add(20,30)

 

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

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

相关文章

QGIS下载天地图瓦片数据

说明 介绍利用QGIS下载天地图瓦片数据。 关键字:window、QGIS、天地图 环境准备 QGIS版本为3.28.3 基本步骤 一、在Browser面板中找到XYZ Tiles 二、New Connection 参数设置 天地图参数 name:如"天地图影像"url :https://t5.tianditu.gov.cn/DataServer?T=…

U-Mail邮件系统:严防数据泄露 保障企业数据安全

在数字经济时代&#xff0c;数据已经成为企业的核心生产要素&#xff0c;也由此滋生了牟取暴利的黑色产业链&#xff0c;企业数据泄露事件有增无减。根据IdentifyTheft Research Center中心的数据显示&#xff0c;2022年世界范围内的数据泄露事件比2021年增长了14%。其中&#…

chatgpt赋能python:Python如何得出结果:从基础语法到高级算法

Python如何得出结果&#xff1a;从基础语法到高级算法 作为一种流行的编程语言&#xff0c;Python被广泛应用于数据分析、人工智能、Web开发等领域。但是&#xff0c;Python也是一种非常值得学习的SEO工具&#xff0c;它可以帮助你得出有关网站排名、竞争对手分析、关键词选择…

JavaScript-Vue

2 Vue 2.1 Vue概述 通过我们学习的htmlcssjs已经能够开发美观的页面了&#xff0c;但是开发的效率还有待提高&#xff0c;那么如何提高呢&#xff1f;我们先来分析下页面的组成。一个完整的html页面包括了视图和数据&#xff0c;数据是通过请求 从后台获取的&#xff0c;那么…

游览器获取用户位置信息,不同游览器获取位置信息不一致

问题 游览器获取用户位置信息&#xff0c;不同游览器获取位置信息不一致 详细问题 对于下述代码 <!DOCTYPE html> <html> <head><title>获取用户经纬度</title><script>function getLocation() {if (navigator.geolocation) {navigato…

数据库原理

做应用开发的同学常常觉得数据库由DBA运维&#xff0c;自己会写SQL就可以了&#xff0c;数据库原理不需要学习。其实即使是写SQL也需要了解数据库原理&#xff0c;比如我们都知道&#xff0c;SQL的查询条件尽量包含索引字段&#xff0c;但是为什么呢&#xff1f;这样做有什么好…

第三章Java锁—基础

文章目录 乐观锁和悲观锁悲观锁悲观锁的实现方式 乐观锁乐观锁的实现方式版本号实现的大致流程 8锁案例弄清synchronized锁了什么3个体现同步方法和同步块&#xff0c;哪个是更好的选择 字节码角度分析synchronized实现文件反编译技巧synchronized同步代码块synchronized普通同…

pikachu靶场-Over Permission

Over Permission&#xff08;越权&#xff09; 用户A 的权限小于用户B 的权限&#xff0c;此时用用户 A 的权限去操作用户 B 的数据&#xff0c;如果能够操作成功&#xff0c;就称之为越权操作。 越权漏洞一般容易出现在权限页面&#xff08;需要登录的页面&#xff09;增、删…

文件系统原理

文件及硬盘管理是计算机操作系统的重要组成部分&#xff0c;让微软走上成功之路的正是微软最早推出的个人电脑PC操作系统&#xff0c;这个操作系统就叫DOS&#xff0c;即Disk Operating System&#xff0c;硬盘操作系统。我们每天使用电脑都离不开硬盘&#xff0c;硬盘既有大小…

黑龙江二造开始报名!文件指出建设单位对现场人员配备达标负首责

注意&#xff01;2023年黑龙江二级造价考试报名时间公布&#xff01;&#xff01;&#xff01;可以开始报名&#xff01; ✨考试时间&#xff1a;7月9日 ✨报名时间&#xff1a;6月6日—6月14日 ✨缴费时间&#xff1a;6月6日—6月16日 ✨打印准考证时间&#xff1a;7月4日&am…

程序运行原理

程序是如何运行起来的 软件被开发出来&#xff0c;是文本格式的代码&#xff0c;这些代码通常不能直接运行&#xff0c;需要使用编译器编译成操作系统或者虚拟机可以运行的代码&#xff0c;即可执行代码&#xff0c;它们都被存储在文件系统中。不管是文本格式的代码还是可执行…

ChatGPT付费创作系统V2.0.2独立版+小程序安装教程

ChatGPT付费创作系统V2.0.2独立版播播资源测试了下相比&#xff0c;本版核心WEB端进行升级优化&#xff0c;前端增加了创作、模拟、使用帮助等选项&#xff0c;小程序端相比上一版无大的变化。体验下来问答速度感觉体验更好。小程序端有更新请对应开发工具更新上传&#xff0c;…

HAL库记录-SDRAM的使用

正点原子--阿波罗开发板STM32F429IGT6 CLK 时钟信号&#xff0c;在该时钟的上升沿采集输入信号 CKE 时钟使能&#xff0c;禁止时钟时&#xff0c;SDRAM 会进入自刷新模式 CS# 片选信号&#xff0c;低电平有效 RAS# 行地址选通信号&#xff…

剑指offer57.和为s的两个数字

双指针i从左往右&#xff0c;j从右往左&#xff0c;如果大于目标值&#xff0c;j往左走否则i往右走&#xff0c;直到等于目标值 class Solution {public int[] twoSum(int[] nums, int target) {int[] res new int[2];int i 0; int j nums.length-1;int sum nums[i] nums…

docker指令

镜像命令 镜像命令 命令描述docker images php查看名字为php的镜像docker images查看所有镜像docker search搜索镜像docker pull 镜像名:tag 拉取镜像docker rmi php删除php镜像 (保存php镜像到目录) docker image save php > D:\phpstudy_pro\WWW\docker\php.tgz 或者 …

【利用AI让知识体系化】简要了解面向对象编程设计

文章目录 I. 面向对象编程简介面向对象编程的定义与发展历程面向对象编程的优点和特点面向对象和面向过程和面向函数式编程之间的对比 II. 面向对象编程的基本概念类和对象抽象和封装继承和多态封装、继承和多态之间的一些对比 III. 面向对象编程设计原则单一职责原则&#xff…

如何搭建高可用redis架构?

题记 Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API。 如今&#xff0c;互联网业务的数据正以更快的速度在增长&#xff0c;数据类型越来越丰富&#xff0c;这对数据处理的速度和能力提…

chatgpt赋能python:Python怎么建网站的SEO

Python怎么建网站的SEO 介绍 Python是一种流行的编程语言&#xff0c;其灵活性和可靠性使其成为了许多网站开发人员的首选语言之一。Python可以用于构建各种类型的网站&#xff0c;包括电子商务和企业级应用程序等。但是&#xff0c;构建一个网站是不够的&#xff0c;您还需要…

力扣刷题记录--二叉树相关问题

目录 二叉树的前中后序遍历递归方法迭代方法&#xff08;未统一写法&#xff09;前序迭代中序迭代后序迭代 迭代方法&#xff08;统一模板&#xff09;二叉树遍历LeetCode 144. 二叉树的前序遍历LeetCode 145. 二叉树的后序遍历LeetCode 94. 二叉树的中序遍历 n叉树的遍历LeetC…

树莓派(raspbian2)上开发OpenCv_C++

树莓派[raspbian2]上开发OpenCv_C 背景故事一.首先就是搭建环境了1.该位置是环境下载地址2.远程连接3.安装OpenCV(如果使用的是上面的镜像,则不用安装) 二.代码示例1.打开摄像头2.采集图像 以上是2023-06-12的日志,接下来还有四天的实训!继续更新! 背景故事 最近刚好赶上学校的…