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的类变量和实例变量详解相关推荐

  1. python 自动化发送邮件_Python自动化必备发送邮件报告脚本详解

    #!/usr/bin/python3 # -*- coding:UTF-8 -*- import smtplib #smtplib库主要用来连接第三方smtp库,用来发邮件 from email.mi ...

  2. python深拷贝一个对象_Python对象的深拷贝和浅拷贝详解

    本文内容是在<Python核心编程2>上看到的,感觉很有用便写出来,给大家参考参考! 浅拷贝 首先我们使用两种方式来拷贝对象,一种是切片,另外一种是工厂方法.然后使用id函数来看看它们的标 ...

  3. python xlrd课程_python中xlrd模块的使用详解

    一.xlrd的安装 打开cmd输入pip install xlrd安装完成即可 二.xlrd模块的使用 下面以这个工作簿为例 1.导入模块 import xlrd 2.打开工作薄 # filename ...

  4. python计算定积分_python编程通过蒙特卡洛法计算定积分详解

    这篇文章主要介绍了python编程通过蒙特卡洛法计算定积分详解,具有一定借鉴价值,需要的朋友可以参考下. 想当初,考研的时候要是知道有这么个好东西,计算定积分...开玩笑,那时候计算定积分根本没有这么 ...

  5. 如何在python制作计算器_Python简易计算器制作方法代码详解

    主要用到的工具是Python中的Tkinter库 比较简单 直接上图形界面和代码 引用Tkinter库 from tkinter import * 建立主窗口对象 window=Tk() #设置窗口对 ...

  6. python echarts接口_python绘图pyecharts+pandas的使用详解

    pyecharts介绍 pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果非常棒 为避免绘制缺 ...

  7. python linspace函数_python的range和linspace使用详解

    在python中要产生一个数字序列,最快的方法就是使用range和linspace函数,但是这两者不太一样,但总的来说实现的效果是一致的,都能获取一个数字序列. range range一看其名就知道是 ...

  8. python accept解析_python中requests库使用方法详解

    一.什么是Requests Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库.它⽐ urllib 更加⽅便,可以节约我们⼤量的 ...

  9. python 进程间通信效率_Python进程间通信 multiProcessing Queue队列实现详解

    一.进程间通信 IPC(Inter-Process Communication) IPC机制:实现进程之间通讯 管道:pipe 基于共享的内存空间 队列:pipe+锁的概念--->queue 二 ...

最新文章

  1. Mysql 添加用户和数据库授权
  2. 检查Android应用程序是否在后台运行
  3. wald检验_笔记:分位数回归斜率相等性检验(Wald检验)
  4. boost::hana::count_if用法的测试程序
  5. 编写自己的Matcher与如何让编译器识别被mock的重载函数
  6. python数据结构题目_《数据结构与算法Python语言描述》习题第二章第三题(python版)...
  7. Random Maze HDU - 4067 费用流/可行流
  8. 利用MyEclipse的ant插件生成Hibernate的映射文件
  9. 为什么说黄桃罐头是东北的人参果
  10. Invalid bean definition with name ‘dataSourceCSS‘ dfined in class path resource[xxx]
  11. 机器学习模型部署文章存档
  12. CJSON parse.c
  13. C#图片处理之: 获取数码相片的EXIF信息(二)
  14. android 预约挂号代码_还在医院苦苦排队挂号?Python定时自动挂号和快捷查询化验报告!...
  15. python 教程 第二十一章、 扩展Python
  16. SQLServer根据.mdf,.ldf,.ndf文件恢复数据库
  17. 关于DNF的多媒体包NPK文件的那些事儿(3) - IMGV2
  18. operator does not exist: timestamp with time zone >= character varying / pandas 链接 psycopg2保存数据问题
  19. php cache_expire,PHP session_cache_expire 会话函数
  20. 《调色师手册:电影和视频调色专业技法(第2版)》——布置调色工作间

热门文章

  1. Python补充01 序列的方法
  2. ffmpeg支持G711音频和H.264视频数据封装为mp4
  3. 【Git】认识各种开源协议及其关系
  4. Caffe官方教程翻译(4):CIFAR-10 turorial
  5. python define graph_Python数据结构与算法之图结构(Graph)实例分析
  6. C# 移除数组中重复项
  7. Python defaultdict 模块和 namedtuple 模块 1
  8. CSS中可以or不可以继承的属性
  9. 更多传媒巨头或进军大数据产业
  10. 了解Access安全性