Python 面向对象——2.类与对象实例属性补充解释,self的作用等

news2024/12/25 10:14:02

本章学习链接如下:

Python 面向对象——1.基本概念

实例的属性

1.创建对象

在上一小节的学习中我们提到了类中的变量与函数变量的区别,self.param1和param1,接下来我们继续详细解释这个知识点。

当我们创建一个学生的类,比如如下代码所示,里面没有用构造函数创造实例属性,类只有当对象被创建时才会被使用,不然什么用都没有。只要对象被创建,类的这段代码就会被运行一遍。

class student():
    pass

在这个类的基础上咱们创建一个对象lina,并打印看看lina的类型,我们可以看到lina属于class student .

class student():
    pass
lina=student() #类的实例化(创建对象)
print(type(lina))

还可以用isinstance 这个命令查看对象是不是属于这个类

class student():
    pass
lina=student() #类的实例化(创建对象)
print(type(lina))
print(isinstance(lina,student))

2.创建实例的属性

我们还是先创建一个空类,再创建一个对象,基于这个对象我们再创建一些属性。

基于对象我们创造了lina的name,age,height等属性,其实这些属性是student这个类中的实例都具有的特点,我们可以用构造函数创建一些实例属性,写进类里面,这样就不用每个对象都需要去自己创建这些共同属性了。

class student():
    pass
lina=student() #类的实例化(创建对象)
lina.name='lina'
lina.age=12
lina.height=172
print(lina.name,lina.age,lina.height)

3.区分self.name和name

其实在之前的学习中我们已经学习到了实例的很多共同属性是用构造函数写进类里来实现的,每当基于这个类创建一个对象,这些对象就有了所初始化的这些属性,就如我们之前所说, 我们现在来区分一下self.name 和name,name 是传入构造函数__init__(self,name,age,height):的参数,而self.name 是类中的参数,让我们把这些名称明显地区分一下:

下面的代码中,我们使用self.a,self .b,self.c分别作为接收构造函数中传入的参数(name,age,height)的变量,让我们运行如下代码,

class student():
    def __init__(self,name,age,height):
        self.a=name
        self.b=age
        self.c=height
lina = student('lina',12,172)
print(lina.a)
print(lina.name)

根据结果我们可以看到,第一个变量lina.a被正确打印,但是lina.name 这个变量不存在,这个结果表明所有的对象运用的变量其实是self.XXX,是类中的变量,而不是构造函数中传入的参数名。

说到这里,大家明白这两者之间的区别了吗?

区分好了之后,我们其实经常 将变量写成self.name=name,因为这样表示的含义是传入的name赋值给实例的name这个属性,如果写成self.a,那对于实例的属性不够直观。

class student():
    def __init__(self,name,age,height):
        self.name=name
        self.age=age
        self.height=height
lina = student('lina',12,172)
print(lina.name,lina.age,lina.height)

 

4.查看实例的属性

用实例._ _dict_ _可以将实例的属性用字典的方式打印出来

class student():
    def __init__(self,name,age,height):
        self.name=name
        self.age=age
        self.height=height
lina = student('lina',12,172)
print(lina.name,lina.age,lina.height)
print(lina.__dict__)

类的属性

我们刚刚已经介绍完实例的属性,当我们想调用某个属性的时候直接执行命令:某某对象.属性就行了,比如

lina.name
lina.age
lina.height

1.创建类的属性

如果我们想实现每创建一个对象就对他计数一次,比如在学生系统里面打印出“欢迎注册育才中学学生系统,您是第XX位学生”,看如下代码,我们可以在类中创建变量,级别与构造函数一样,因为每创建一个对象,构造函数就会被调用一次,所以在构造函数里面调用类的属性可以实现number累加的效果。

class student():
    number = 0  # 创建类的属性

    def __init__(self, name, age, height):
        student.number += 1  # 在创建实例时增加计数器
        self.name = name
        self.age = age
        self.height = height
        print(f"欢迎注册育才中学学生系统,您是第{student.number}位学生!")

lina = student('lina', 12, 172)
# 不需要单独增加计数器,因为已经在构造函数中处理了
tom = student('tom', 13, 165)
# 同样不需要,计数器在创建实例时自动增加

也可以创建一次对象,就调用一次,可以实现同样的效果,只是代码没有那么简洁。

class student():
    number=0#创建类的属性
    def __init__(self,name,age,height):
        self.name=name
        self.age=age
        self.height=height
lina = student('lina',12,172)
student.number += 1  # 调用类的属性
print(f"欢迎注册育才中学学生系统,您是第{student.number}位学生!")
tom=student('tom',13,165)
student.number += 1  # 调用类的属性
print(f"欢迎注册育才中学学生系统,您是第{student.number}位学生!")

为什么第二次调用时number没有重置为0呢,原因如下:

类属性属于类本身,而不是类的任何特定实例。student.number是一个类属性,0是他的初始化后的值,因为不涉及循环的代码执行,只是简单的调用函数,类的属性的参数更新可以跟着变量保持下来。

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

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

相关文章

铜缆与网线:数字时代的信息高速公路

在现代社会,信息传输已成为日常生活的重要部分。从个人通信到全球数据中心,铜缆和网线扮演着至关重要的角色。本文将详细介绍铜缆和网线的类型、特点以及它们在数字时代的应用。 铜缆的种类与应用 铜缆的类型 UTP(无屏蔽双绞线)&…

登录的几种方式

一、session 1、客户端发送请求,服务器将登录信息存储在 Session 中,Session 依赖于 Cookie(cookie指的就是在浏览器里面存储的一种数据,仅仅是浏览器实现的一种数据存储功能。Cookie实际上是一小段的文本信息。)&…

Arthas介绍及使用技巧

文章目录 简介能做什么? 使用下载并启动arthas选择应用 java 进程退出 arthas 常用查看命令帮助查看 dashboard通过 thread 命令来获取到线程的栈通过 jad 来反编译 Classwatch 查看方法出入参、sc 搜索类: 查看已加载类所在的包monitor 方法执行监控trace 方法内调…

牛客NC238 加起来和为目标值的组合【中等 DFS C++、Java、Go、PHP】

题目 题目链接: https://www.nowcoder.com/practice/172e6420abf84c11840ed6b36a48f8cd 思路 本题是组合问题,相同元素不同排列仍然看作一个结果。 穷经所有的可能子集,若和等于target,加入最终结果集合。 给nums排序是为了方便…

day04 51单片机-矩阵按键

1 矩阵按键 1.1 需求描述 本案例实现以下功能:按下矩阵按键SW5到SW20,数码管会显示对应的按键编号。 1.2 硬件设计 1.2.1 硬件原理图 1.2.2 矩阵按键原理 1.3软件设计 1)Int_MatrixKeyboard.h 在项目的Int目录下创建Int_MatrixKeyboard.h,写入以下内容。 #ifndef __…

Pyhton Sqlite3手机数据库

代码结果 Code import sqlite3 connsqlite3.connect(test.db) csconn.cursor() create_tb_sqlcreate table if not exists info(id int primary key,name text,age int)cs.execute(create_tb_sql)# cs.execute(insert into info(id,name,age) values(3,"dog_Senior&quo…

Ubuntu Server 20.04 LTS 64bit安装ftp服务

1.安装vsftpd sudo apt install vsftpd2.配置vsftpd sudo vim /etc/vsftpd.conf write_enableYES # 启用任何形式的FTP写入命令,即可以修改文件local_umask022 # 本地用户创建文件的 umask 值,默认是被注释的connect_from_port_20YES # 针对 PORT 类型…

java 溯本求源之基础(十八)之Monitoring--jmc

1.JMC概述 JMC全称Java Mission Control,集成了多个功能强大的组件,其中最核心的两部分是管理控制台和Java Flight Recorder。管理控制台允许开发者实时监控应用的运行状态,捕捉各种性能指标;而Java Flight Recorder则提供了一种高…

深兰科技入选2024全国“人工智能+”行动创新案例TOP100

近日,中科院《互联网周刊》联合eNET研究院、德本咨询、中国社会科学院信息化研究中心共同发布了《2024全国“人工智能”行动创新案例TOP100》榜单。经评委会层层遴选,深兰科技专为洛阳市打造的“工业智能化洛阳中心”项目成功入围该榜单。一同入围的还包…

力扣(leetcode) 407. 接雨水 II 3D接雨水

力扣(leetcode) 407. 接雨水 II 3D接雨水 给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。 示例 1: 输入: heightMap [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 输…

IEC104协议

1. 简介 IEC104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准。 2. 术语解释 遥脉 (电度量): 是指对现场某装置所发出的脉冲信号进行周期累计的一种远程计数操作。 其实,遥脉也可以看成是被具体规定了采用脉冲计数作为测量方法的一种遥测…

日本二次元团建国内院线:一周一部,占据36.2%票房

从《你想活出怎样的人生》开始,到《哈尔的移动城堡》结束,日本动画正在占据国内院线的整个4月份档期。 包括《数码宝贝02:最初的召唤》、《间谍过家家 代号:白》多部作品在内,整个国内四月份院线日本动画平均一周上映…

分布式锁(Redis)

一、序言 本文和大家聊聊分布式锁以及常见的解决方案。 二、什么是分布式锁 假设一个场景:一个库存服务部署在上面三台机器上,数据库里有 100 件库存,现有 300 个客户同时下单。并且这 300 个客户均摊到上面的三台机器上(即三台…

4套java智慧型管理系统源码-智慧校园-智慧工地-智慧城管-智慧3D导诊

第一套:Java智慧校园系统源码 智慧学校源码 微信小程序电子班牌 智慧校园系统简介: 智慧校园的建设逐渐被师生、家长认可接受,智慧校园通过对在校师生、教务等所有人员的信息以及各种信息搜集与储存,进行数据优化与管理&#xf…

信息系统项目管理师0057:运维管理(4信息系统管理—4.2管理要点—4.2.2运维管理)

点击查看专栏目录 文章目录 4.2.2运维管理1.能力模型2.智能运维4.2.2运维管理 IT运维是组织IT服务中关键的一种类型。随着组织IT建设的不断深入和完善,信息系统运维已经成为了各行各业各组织管理者和IT团队普遍关注的问题。IT运维是指采用IT手段及方法,依据服务对象提出的服务…

代码学习记录49---单调栈

随想录日记part49 t i m e : time: time: 2024.04.20 主要内容:今天开始要学习单调栈的相关知识了,今天的内容主要涉及:柱状图中最大的矩形 84.柱状图中最大的矩形 Topic184.柱状图中最大的矩形 题目&…

一线实战:国产数据库Mogdb双网卡同步最佳实践

前言 大家都知道Oracle数据库无论是单机还是RAC集群在进行生产部署实施时,我们都会对网卡做冗余考虑,使用双网卡,比如public、心跳网络。这样的目的主要是为了安全,避免单点故障。当然双网卡Bond不仅是可以做主备还可以支持负载均…

问题总结笔记

1.向量旋转 问题: 将一个向量旋转90 方法:旋转矩阵 FVector FrontDir EndMousePoint - Point; FrontDir.Normalize(); FVector Left FVector(-FrontDir.Y, FrontDir.X, 0); Verties.Add(Point Left * (WallWedith / 2)); Verties.Add(FVector(Vertie…

告别数据丢失,轻松掌握文件自动备份秘籍

在这个数字化高速发展的时代,我们的工作和生活都离不开电脑,而电脑中存储的文件和数据更是至关重要。然而,数据丢失的风险无处不在,可能因为硬件故障、软件崩溃、病毒攻击等原因而导致重要文件丢失。因此,文件自动备份…

漫谈HAMR硬盘的可靠性-2

很显然,HAMR已经成为业内用于提升HDD硬盘容量硬盘的技术手段。三家机械硬盘HDD厂商,希捷、西数、东芝都已对HAMR硬盘进行了十多年的研究,但只有希捷大胆押注HAMR。相反,东芝和西部数据在采用HAMR之前选择了能量辅助垂直磁记录&…