python之类也是一个对象
时间:2022-07-23
本文章向大家介绍python之类也是一个对象,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
python中一切皆对象:
- class A:是一个类对象
- a = A():是一个实例对象
在程序运行时,类同样会被加载到内存。
在python中,类是一个特殊的对象--类对象。
在程序运行时,类对象在内存中只有一份,使用一个类可以创建出多个对象实例。
除了封装实例的属性和方法外,类对象还可以有自己的属性和方法。
通过类名.的方式可以访问类的属性和调用类的方法。
什么是类属性?
类属性就是给类对象中定义的属性,即在class下方使用赋值语句即可。通常用于记录与这个类相关的一些特征。类属性不会用于记录具体对象的特征。例如:
class Tool(object):
count = 0
def __init__(self,name):
self.name = name
Tool.count +=1
t1 = Tool("first")
t2 = Tool("second")
t3 = Tool("third")
print(Tool.count)
输出:3
其中count就是一个类属性,该属性用于记录创建了多少个实例化的对象。访问时通过(类名.类属性名)进行访问。
接下来有另外一个问题:假设我们在实例化的对象中调用该类属性会出现什么结果呢?
print(t1.count)
print(t3.count)
输出:3 3
说明了类属性是所有对象都共用的,可以这么理解,类属性相当于c++语言中的static,为静态的。还是推荐使用类名来使用。
接下来就有另一个问题,假设我们通过对象访问类的属性,然后改变它的值,又会发生什么呢?
t3.count = 99
print(t3.count)
print(Tool.count)
输出:99 3
python解释器在执行赋值语句时,就会在该对象中查找,如果该对象中没有count属性,那么就会为该对象新建一个属性count,并赋值成99,而不会影响到类属性。这就是使用对象访问类属性存在的问题。
什么是类方法?
类方法需要用修饰器@classmethod来标识,高速解释器这是一个类方法。类方法的第一个参数应该是cls。
- 由哪一个类调用的方法,方法内的cls就是哪一个类的引用。
- 通过类名调用类方法时,不需要传递cls参数。
- 在方法内部,可以通过cls.访问类的属性,也可通过cls.访问其它的类方法。
class Tool(object):
count = 0
@classmethod
def show_tool_count(cls):
print("创建的实例化的对象个数为:",cls.count)
def __init__(self,name):
self.name = name
Tool.count +=1
t1 = Tool("first")
t2 = Tool("second")
t3 = Tool("third")
Tool.show_tool_count()
python中的静态方法?
既不需要访问类的方法,也不需要访问对象的方法。
class Tool(object):
count = 0
@staticmethod
def run():
print("什么事也不想做")
def __init__(self,name):
self.name = name
Tool.count +=1
t1 = Tool("first")
t2 = Tool("second")
t3 = Tool("third")
Tool.run()
静态方法不需要传入第一个参数来标识,同时在方法上用staticmethod来修饰。同时不需要创建类的实例,可以直接通过类名来访问该方法。
- 高斯消元法(Gauss Elimination)【超详解&模板】
- [快学Python3]读写Excel - openpyxl库
- HDU 2147 kiki's game(规律,博弈)
- HDU 1847 Good Luck in CET-4 Everybody!(规律,博弈)
- [network][udp]你不要偷偷发包,我跟你讲
- [快学Python3]HTTP处理 - urllib模块
- 关小刷刷题08 – Leetcode 26. Remove Duplicates from Sorted Array 方法2、3
- C++课程设计类作业2
- C++课程设计类作业4
- [接口测试 - 基础篇] 01 你应该了解的协议基础
- 代码分享系列(1)之感知机【代码可下载】
- C++课程设计类作业3
- [快学Python3]INI文件读写
- 【专知-PyTorch手把手深度学习教程08】NLP-PyTorch: 用字符级RNN生成名字
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [记录] 数据库中,根据经纬度,查询距离最近的地点
- PAT (Basic Level) Practice (中文)1010 一元多项式求导 (25 分)
- R语言随机森林模型中具有相关特征的变量重要性
- PAT (Basic Level) Practice (中文)1009 说反话 (20 分)
- Codeforces Beta Round #8 A. Train and Peter
- Codeforces Round #559 (Div. 2)B. Expansion coefficient of the array
- Codeforces Beta Round #72 (Div. 1 Only)B. Doctor
- pygame游戏常用方法
- node-blog:用 node 搭建的个人开源博客
- 2018-2019 ICPC, NEERC, Southern Subregional Contest D. Garbage Disposal
- 「查缺补漏」JavaScript执行上下文-执行栈
- 树状数组 _ 求逆序数
- PAT (Basic Level) Practice (中文)1012 数字分类 (20 分)
- PAT (Basic Level) Practice (中文)1018 锤子剪刀布 (20 分)
- 还在用传统的方式驱动一个通信模组?不如一起来学习下TOS的AT模组框架吧!