Python 静态方法和类方法实例分析


Posted in Python onNovember 21, 2019

本文实例讲述了Python 静态方法和类方法。分享给大家供大家参考,具体如下:

1. 类属性、实例属性

它们在定义和使用中有所区别,而最本质的区别是内存中保存的位置不同,

实例属性属于对象

类属性属于类

class Province(object):
  # 类属性
  country = '中国'
  def __init__(self, name):
    # 实例属性
    self.name = name
# 创建一个实例对象
obj = Province('山东省')
# 直接访问实例属性
print(obj.name)
# 直接访问类属性
Province.country

由上述代码可以看出【实例属性需要通过对象来访问】【类属性通过类访问】,在使用上可以看出实例属性和类属性的归属是不同的。

其在内容的存储方式类似如下图:

Python 静态方法和类方法实例分析

由上图看出:

类属性在内存中只保存一份

实例属性在每个对象中都要保存一份

应用场景:

通过类创建实例对象时,如果每个对象需要具有相同名字的属性,那么就使用类属性,用一份既可

2. 实例方法、静态方法和类方法

方法包括:实例方法、静态方法和类方法,三种方法在内存中都归属于类,区别在于调用方式不同。

实例方法:由对象调用;至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self;

类方法:由类调用; 至少一个cls参数;执行类方法时,自动将调用该方法的类赋值给cls;

静态方法:由类调用;无默认参数;

class Foo(object):
  def __init__(self, name):
    self.name = name
  def ord_func(self):
    """ 定义实例方法,至少有一个self参数 """
    # print(self.name)
    print('实例方法')
  @classmethod
  def class_func(cls):
    """ 定义类方法,至少有一个cls参数 """
    print('类方法')
  @staticmethod
  def static_func():
    """ 定义静态方法 ,无默认参数"""
    print('静态方法')
f = Foo("中国")
# 调用实例方法
f.ord_func()
# 调用类方法
Foo.class_func()
# 调用静态方法
Foo.static_func()

Python 静态方法和类方法实例分析

对比

相同点:对于所有的方法而言,均属于类,所以 在内存中也只保存一份

不同点:方法调用者不同、调用方法时自动传入的参数不同。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
浅析Python中的多重继承
Apr 28 Python
使用Python对Excel进行读写操作
Mar 30 Python
详解django自定义中间件处理
Nov 21 Python
python中强大的format函数实例详解
Dec 05 Python
Python 通过requests实现腾讯新闻抓取爬虫的方法
Feb 22 Python
在python plt图表中文字大小调节的方法
Jul 08 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
python DataFrame转dict字典过程详解
Dec 26 Python
python对XML文件的操作实现代码
Mar 27 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
Dec 03 Python
python中remove函数的踩坑记录
Jan 04 Python
python基础之类方法和静态方法
Oct 24 Python
Python 用turtle实现用正方形画圆的例子
Nov 21 #Python
python 实现兔子生兔子示例
Nov 21 #Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 #Python
用python中的matplotlib绘制方程图像代码
Nov 21 #Python
python hash每次调用结果不同的原因
Nov 21 #Python
python/Matplotlib绘制复变函数图像教程
Nov 21 #Python
Python 复平面绘图实例
Nov 21 #Python
You might like
用PHP和ACCESS写聊天室(十)
2006/10/09 PHP
php通用防注入程序 推荐
2011/02/26 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
2011/07/29 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
js中格式化日期时间型数据函数代码
2010/11/08 Javascript
JQuery中操作Css样式的方法
2014/02/12 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
JavaScript中双叹号(!!)作用示例介绍
2014/04/10 Javascript
现代 JavaScript 开发编程风格Idiomatic.js指南中文版
2014/05/28 Javascript
js中的for如何实现foreach中的遍历
2014/05/31 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
jQuery实现仿腾讯迷你首页选项卡效果代码
2015/09/17 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
Vue之Watcher源码解析(2)
2017/07/19 Javascript
解决Layui数据表格中checkbox位置不居中的方法
2018/08/15 Javascript
在Vue-cli里应用Vuex的state和mutations方法
2018/09/16 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
vue 判断两个时间插件结束时间必选大于开始时间的代码
2020/11/04 Javascript
[54:58]完美世界DOTA2联赛PWL S2 LBZS vs Rebirth 第一场 11.25
2020/11/25 DOTA
[08:53]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS 选手采访
2021/03/11 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
Python split() 函数拆分字符串将字符串转化为列的方法
2019/07/16 Python
利用Python发送邮件或发带附件的邮件
2020/11/12 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
Java如何支持I18N?
2016/10/31 面试题
JavaScript实现简单计时器
2021/06/22 Javascript
MongoDB使用场景总结
2022/02/24 MongoDB