【Python】一篇拿下类属性与类方法详解【超详细的注释和解释】

前言
先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记关注我哦!️️️
今天给大家带来的是python的类的一些详细介绍
我们知道,类有三大属性:封装、继承、多态。
今天,我们将会对类的本身进行一些讨论,讨论类的属性和方法。
类的属性其实就是对应C++中成员变量
类的方法其实就是对应C++中成员函数
那么这里博主先安利一下一些干货满满的专栏啦!
数据结构专栏:数据结构 这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏:算法 这里可以说是博主的刷题历程,里面总结了一些经典的力扣上的题目,和算法实现的总结,对考试和竞赛都是很有帮助的!
力扣刷题专栏:Leetcode 想要冲击ACM、蓝桥杯或者大学生程序设计竞赛的伙伴,这里面都是博主的刷题记录,希望对你们有帮助!
C的深度解剖专栏:C语言的深度解剖 想要深度学习C语言里面所蕴含的各种智慧,各种功能的底层实现的初学者们,相信这个专栏对你们会有帮助的!
类的实例化
类的实例化用代码来表示其实就是,我们定义了类之后,我们创建一个类对象的过程。
class Test:# Test()这里可以跟括号,表示继承哪一个类
# 如果不写默认继承object类
def func(self):
pass
# ...
t=Test() #这个就是类的实例化
类的非静态属性或方法(实例属性和方法)
类的非静态属性即对标C++中的非静态成员变量
要注意的点:
- python中的非静态成员变量只能写在成员函数里面,不能写在外面(这里和C++是有区别的)
- 成员函数的括号内有必须写参数,第一个参数一定要是
self(这个和C++类中的this指针类似,区别在于this指针我们是不用显式去写的,但是在Python中,这个self我们一定是要加上的) - 成员函数可以带缺省参数(和C++的是同一个意思,即在形参后面赋值,当函数被传参了,缺省参数不起作用,函数没有被传参,缺省参数起作用)
- 定义成员属性的时候要加上
self.具体可以看代码中的例子
class Test:
"""
这是一个用来测试的类
"""
def Print(self): # 这里是一个实例/方法(java)/成员函数(C++)
# 必须带一个self,self必须是第一个参数
# 表示当前这个实例的引用 和this指针类似
self.x=10 # 在另外的成员函数中定义也是可以的
print('hehe',self.x)
# 实例属性必须在实例方法中创建 -- 也就是必须在def里面创建
# 这里和C++是不一样的,C++我们一般都是在成员函数外面去定义,这里是里面
当然,我们可以把非静态成员变量统一放在另一个成员函数里面
class Test: # Test()这里可以跟括号,表示继承哪一个类
# 如果不写默认继承object类
"""
这是一个用来测试的类
"""
def Init(self,num=10): # 也可以带缺省参数
self.x=num
def Print(self): # 这里是一个实例/方法(java)/成员函数(C++)
# 必须带一个self,self必须是第一个参数
# 表示当前这个实例的引用 和this指针类似
print('hehe',self.x)
t=Test()
t.Init() #先调用Init()
t.Print()
通过代码我们可以发现
我们要先调用Init(),我们的x才能用
下面的Print()才能正常使用我们的x
这样其实比较麻烦
那么有没有一种方法,可以不这样做呢?
有的,其实就是构造函数
我们知道,一个类被实例化的时候,会自动调用这个类的构造函数,这个是不需要我们自己去手动调用的
- Python中类的构造函数名称是
__init__
也就是我们python解释器,在类的实例化的时候会自动调用一个名叫__init__的函数,如果我们不写,解释器也会自动调用
有了这种方法我们就可以改写上面那些的代码了
class Test:
"""
这是一个用来测试的类
"""
def __init__(self,num=10): # 也可以带缺省参数
self.x=num
def Print(self):
print('hehe',self.x)
# 这样我们使用一个__init__构造函数,我们后面就不用手动调用了
#
方法总结:
因此通常我们构造python类的时候我们都把一个类的
实例属性(成员变量)全都写到__init__里面
都集中写到里面去即可当然 构造函数也可以传参缺省参数
类的静态属性和方法
静态属性(静态成员变量)
当然,python中的类也支持静态成员变量 在C++/java中,加了
static,这个变量就和实例无关,只和类相关的东西了
也就是我们不需要实例化类,也可以用这个变量
python的类中的静态成员变量 – 只需要写到成员函数外面即可
class Test:
val=10
def __init__(self):
x=10
y=20
def Print():
print("hehe")
print(Test.val) # 无需将类实例化 -- 也可以使用val
静态方法
看到这里,我们自然会想:python里面的静态成员函数是怎么样的呢?
- 首先我们可以想到的,就是不传
self,因为是静态的,所以和self没有关系,不传self难道就是静态的了吗?
答案是否定的,我们还需要多加一个对函数的修饰语句
def StaticPrint(): # 不传this指针 --
# 也就是self 我们就是静态成员函数了吗
# 还不是 -- 还需要画龙点睛之笔
print('static_haha')
StaticPrint=staticmethod(StaticPrint)
#把我们的函数设置成静态的
但是这样写,我们就要多写一句话,以上是方法一,我们还有一种方法:
@staticmethod
def StaticPrint():
print('static_haha')
# 使用python中的@
# 这个是装饰器
总结:将函数编程静态的两种方法:
- 在函数后面补上
staticmethod()语句 - 在函数前使用
@staticmethod装饰器
此时这个静态函数就是我们想要的静态成员函数了吗?
其实不是,我们通过测试可以发现,这个设置为静态之后的函数,并不能访问我们的成员变量!

这里可以说明了,我们在这一小节说的这个静态函数,仅仅只是静态方法,不能说是和C++静态成员函数对标的类方法
类方法(静态成员函数)
处理方式:
@classmethod 表示类方法
@classmethod
def ClassPrint(cls):
"""类方法"""
# cls表示当前类
print("hehe",cls.val)
这个才是真正的类方法,真正的静态成员函数!
总结
- 实例属性(非成员变量)
- 实例方法(非静态成员函数)
- 类属性(静态成员变量)
- 类方法(静态成员函数)
- 静态方法
属性的访问权限
- Python中使用双下划线前缀表示私有 – 相当于
private,其它都是public的
# Python中使用双下划线前缀表示私有 -- 相当于private
class Test:
def __init__(self):
self.__x=10 #私有
t=Test()
print(t._x) #无法访问,因为__x是私有属性
尾声
看到这里,相信我们对Python中的类的一些基本信息已经了解了。
其实类的三大属性是:封装、继承、多态
博主会在以后的文章里给大家详细讲解(C++和Python)的都会有。所以还是希望大家一键三连支持一下!点赞!收藏!关注!
【Python】一篇拿下类属性与类方法详解【超详细的注释和解释】的更多相关文章
- 第7.15节 Python中classmethod定义的类方法详解
第7.15节 Python中classmethod定义的类方法详解 类中的方法,除了实例方法外,还有两种方法,分别是类方法和静态方法.本节介绍类方法的定义和使用. 一. 类方法的定义 在类中定 ...
- Kotlin——初级篇(四):控制语句详解
在前面 的章节中讲解了Kotlin语言中的数据类型.变量与常量的定义.不了解请参见前面的内容: Kotlin--初级篇(三):数据类型详解. Kotlin--初级篇(二)常量.变量.注释. 下面详细为 ...
- 【转】Python的hasattr() getattr() setattr() 函数使用方法详解
Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...
- Android基础夯实--重温动画(五)之属性动画 ObjectAnimator详解
只有一种真正的英雄主义 一.摘要 ObjectAnimator是ValueAnimator的子类,它和ValueAnimator一样,同样具有计算属性值的功能,但对比ValueAnimator,它会更 ...
- 【python库模块】Python subprocess模块功能与常见用法实例详解
前言 这篇文章主要介绍了Python subprocess模块功能与常见用法,结合实例形式详细分析了subprocess模块功能.常用函数相关使用技巧. 参考 1. Python subprocess ...
- 利用python求解物理学中的双弹簧质能系统详解
利用python求解物理学中的双弹簧质能系统详解 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的 ...
- python中利用队列asyncio.Queue进行通讯详解
python中利用队列asyncio.Queue进行通讯详解 本文主要给大家介绍了关于python用队列asyncio.Queue通讯的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细 ...
- Python中生成器和yield语句的用法详解
Python中生成器和yield语句的用法详解 在开始课程之前,我要求学生们填写一份调查表,这个调查表反映了它们对Python中一些概念的理解情况.一些话题("if/else控制流" ...
- SpringBoot之Spring@Value属性注入使用详解
在使用Spring框架的项目中,@Value是使用比较频繁的注解之一,它的作用是将配置文件中key对应的值赋值给它标注的属性.在日常使用中我们常用的功能都比较简单,本篇文章系统的带大家来了解一下@Va ...
- SQLAlchemy02 /SQLAlchemy对数据的增删改查操作、属性常用数据类型详解
SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 目录 SQLAlchemy02 /SQLAlchemy对数据的增删改查操作.属性常用数据类型详解 1.用se ...
随机推荐
- 如何做一次完美的 ABTest?
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/mO5MdwG7apD6RzDhFwZhog作者:DuZhimin 越来越多的公司都在尝试 AB ...
- Serverless 的前世今生
作者:刘宇(江昱) 从云计算到Serverless架构 大家好,我是阿里云 Serverless 产品经理刘宇,很高兴可以和大家一起探索 Serverless 架构的前世今生. 从云计算到云原生再到 ...
- vue实现word或pdf文档导出的功能
https://www.jianshu.com/p/73915ef6ac89 Vue - element-ui 中预览 word .exce.ppt以及pdf文件 https://blog.csdn. ...
- 运筹学 | 退化的最优解 vs 无穷多最优解?
退化的最优解: 单纯形表的基可行解中,出现等于零的基变量.或者,按最小比值来确定出基向量时,存在两个以上相同最小比值. 出现的原因:模型中存在多余的约束. 无穷多最优解: 单纯形表中,按最大检验数 σ ...
- springBoot 整合 hikari
Hikari是一款非常强大,高效,并且号称"史上最快连接池".并且在springboot2.0之后,采用的默认数据库连接池就是Hikari.不需要引入依赖,已经在SpringBoo ...
- 项目使用 GlobalExceptionHandler 与 @RestControllerAdvice自定义异常 二
未经博主允许不得转载: 自定义异常,不仅需要定义符合自己业务的异常状态码,也需要定义自己项目中的异常封装.记录下自己手敲代码中的异常封装: 1.定义一个枚举类,枚举类中定义状态码及状态码描述,再定义一 ...
- 使用React简短代码动态生成栅格布局
使用React简短代码动态生成栅格布局 作为 TerminalMACS 的一个子进程模块 - React Web管理端,使用Ant Design Pro作为框架. 本文应用到的知识 1.样式文件les ...
- 03-Shell环境变量深入
1. 自定义系统环境变量 1.1 全局配置文件/etc/profile应用场景 当前用户进入Shell环境初始化的时候会加载全局配置文件/etc/profile里面的环境变量, 供给所有Shell程序 ...
- DC逻辑综合工具简介-Design Compiler
逻辑综合简介 逻辑综合:代码转变为网表 FPGA:代码转变为FPGA内部的数字单元 在进行综合的时候往往会使用一些脚本工具 需要学会看综合之后的报告 1.目标 进行综合需要读入RTL设计,还需要用到f ...
- K8s集群CoreDNS监控告警最佳实践
本文分享自华为云社区<K8s集群CoreDNS监控告警最佳实践>,作者:可以交个朋友. 一 背景 coreDNS作为K8s集群中的关键组成部分.主要负责k8s集群中的服务发现,域名解析等功 ...