python 实例变量_Python的类变量和实例变量详解
Asuka
什么是类变量?
class Student:
name = 'Asuka'
age = '18'
...
上面定义的name和age就是类变量
什么是实例变量?
class Student:
def __init__(self,name,age)
self.name = name
self.age = age
...
上面定义的name和age就是实例变量
类变量和实例变量的区别和应用
类变量为所有实例化后的类共享,有点类似继承的概念,实例化后,每个实例都会有这个属性,有种default的意味,可以设置一个带默认值的属性.
实例变量为每个实例化后的类独有,因为python类实例化之后会自动调用init方法,如果您在类里面定义了相同的属性,那么init下的实例变量会重写相同的类变量.
一般来说,我们更多的运用实例变量,因为按照严格的面向对象思想,类的所有属性都应该是实例的,类变量根本就不应该存在的,不过类变量偶尔还是有一点用处的,比如设置默认值和常量.
关于dict的说明
大家在序列化类,比如转成json格式,许多同学会想到先把类转成dict,然后再转成json.于是,同学们可能会考虑用dict.
我想告诉同学们的一句话是,使用dict方法只能序列化实例变量,无法序列化类变量.
如何写出一个优美的面向对象的类
下面这句是关键
类应该保存描述自身的特点和能够实现的行为.
1.尽量多使用实例变量,不要总想把类里面的资源return到外部
2.类下面的函数应该有操作实例变量的行为,也就是通常所说的方法
3.类里面不能只有staticmethod,classmethod这类的方法,因为这些还是面向过程的思维,不要一步步想着写方法,根本没用到自己实例的属性
4.面向对象的思维其实就是一种造物主的思维,我们思考问题的时候要有一些灵性,少了什么,我们就直接创造一个出来就行了,别和解数学题一样,总是在想求解方程中x,y,z等于什么.
如果大家有过python web编程经验的话,就和编写视图函数是一样的,我们编写视图函数的时候总是会事先假象我们有验证层,模型层,视图模型层等等分层,我们先定好整体的逻辑,事后再补齐对应层的函数,就和造物主有点类似,少了什么我们直接new一个就行了(为什么不能new一个对象出来呢?).
视图函数内部总是会实例化一些验证实例(wtforms),模型实例(sqlalchemy),业务逻辑等等内容,这些内容本来都是不存在的,都是我们在其他地方定义好的类或者函数,却直接在视图函数中用上来了.
Python 3.7的dataclass
from dataclasses import dataclass
@dataclass
class Student:
name:str
age:int
...
python 3.7版本中加了一个令人激动的dataclass装饰器,简单的实现类比上面,如果同学们比较反感编写构造函数时候要编写大量重复的代码,可以尝试下dataclass装饰器.
这个装饰器,不仅仅是简写代码,直观显示数据类型,还可以进行数据比较,创建不可变属性,使用post_init预处理变量等等好处.
如果想要更详细了解这个新功能的细节,可以看下这篇文章--->https://linux.cn/article-9974-1.html
最后的留言
如果大家有什么疑问,可以在下方留言或者私信我,看到我会回复的(就是很难及时回复了).
如果我上面说的有什么错误,欢迎大家指正我(杠起来).
这是我的个人站点——一路香蕉皮,有兴趣可以点击查看下,里面有软件,教程,图片福利分享
python 实例变量_Python的类变量和实例变量详解相关推荐
- python 自动化发送邮件_Python自动化必备发送邮件报告脚本详解
#!/usr/bin/python3 # -*- coding:UTF-8 -*- import smtplib #smtplib库主要用来连接第三方smtp库,用来发邮件 from email.mi ...
- python深拷贝一个对象_Python对象的深拷贝和浅拷贝详解
本文内容是在<Python核心编程2>上看到的,感觉很有用便写出来,给大家参考参考! 浅拷贝 首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法.然后使用id函数来看看它们的标 ...
- python xlrd课程_python中xlrd模块的使用详解
一.xlrd的安装 打开cmd输入pip install xlrd安装完成即可 二.xlrd模块的使用 下面以这个工作簿为例 1.导入模块 import xlrd 2.打开工作薄 # filename ...
- python计算定积分_python编程通过蒙特卡洛法计算定积分详解
这篇文章主要介绍了python编程通过蒙特卡洛法计算定积分详解,具有一定借鉴价值,需要的朋友可以参考下. 想当初,考研的时候要是知道有这么个好东西,计算定积分...开玩笑,那时候计算定积分根本没有这么 ...
- 如何在python制作计算器_Python简易计算器制作方法代码详解
主要用到的工具是Python中的Tkinter库 比较简单 直接上图形界面和代码 引用Tkinter库 from tkinter import * 建立主窗口对象 window=Tk() #设置窗口对 ...
- python echarts接口_python绘图pyecharts+pandas的使用详解
pyecharts介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果非常棒 为避免绘制缺 ...
- python linspace函数_python的range和linspace使用详解
在python中要产生一个数字序列,最快的方法就是使用range和linspace函数,但是这两者不太一样,但总的来说实现的效果是一致的,都能获取一个数字序列. range range一看其名就知道是 ...
- python accept解析_python中requests库使用方法详解
一.什么是Requests Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库.它⽐ urllib 更加⽅便,可以节约我们⼤量的 ...
- python 进程间通信效率_Python进程间通信 multiProcessing Queue队列实现详解
一.进程间通信 IPC(Inter-Process Communication) IPC机制:实现进程之间通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁的概念--->queue 二 ...
最新文章
- Mysql 添加用户和数据库授权
- 检查Android应用程序是否在后台运行
- wald检验_笔记:分位数回归斜率相等性检验(Wald检验)
- boost::hana::count_if用法的测试程序
- 编写自己的Matcher与如何让编译器识别被mock的重载函数
- python数据结构题目_《数据结构与算法Python语言描述》习题第二章第三题(python版)...
- Random Maze HDU - 4067 费用流/可行流
- 利用MyEclipse的ant插件生成Hibernate的映射文件
- 为什么说黄桃罐头是东北的人参果
- Invalid bean definition with name ‘dataSourceCSS‘ dfined in class path resource[xxx]
- 机器学习模型部署文章存档
- CJSON parse.c
- C#图片处理之: 获取数码相片的EXIF信息(二)
- android 预约挂号代码_还在医院苦苦排队挂号?Python定时自动挂号和快捷查询化验报告!...
- python 教程 第二十一章、 扩展Python
- SQLServer根据.mdf,.ldf,.ndf文件恢复数据库
- 关于DNF的多媒体包NPK文件的那些事儿(3) - IMGV2
- operator does not exist: timestamp with time zone >= character varying / pandas 链接 psycopg2保存数据问题
- php cache_expire,PHP session_cache_expire 会话函数
- 《调色师手册:电影和视频调色专业技法(第2版)》——布置调色工作间