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 相关文章推荐
wxpython 学习笔记 第一天
Feb 09 Python
编程语言Python的发展史
Sep 26 Python
Python基类函数的重载与调用实例分析
Jan 12 Python
python2.7的编码问题与解决方法
Oct 04 Python
numpy中的高维数组转置实例
Apr 17 Python
flask框架单元测试原理与用法实例分析
Jul 23 Python
python manage.py runserver流程解析
Nov 08 Python
Keras中的多分类损失函数用法categorical_crossentropy
Jun 11 Python
如何利用python进行时间序列分析
Aug 04 Python
python3中编码获取网页的实例方法
Nov 16 Python
如何在向量化NumPy数组上进行移动窗口
May 18 Python
python如何利用traceback获取详细的异常信息
Jun 05 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中关于普通表单多文件上传的处理方法
2011/03/25 PHP
深入解析php中的foreach问题
2013/06/30 PHP
jQuery 类twitter的文本字数限制带提示效果插件
2010/04/16 Javascript
把jQuery的类、插件封装成seajs的模块的方法
2014/03/12 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
jQuery插件scroll实现无缝滚动效果
2015/04/27 Javascript
jQuery+CSS实现滑动的标签分栏切换效果
2015/12/17 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
浅谈JQ中mouseover和mouseenter的区别
2016/09/13 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
2016/12/13 Javascript
js实现漫天星星效果
2017/01/19 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
python字符串查找函数的用法详解
2019/07/08 Python
在pycharm中显示python画的图方法
2019/08/31 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
Python实现一个优先级队列的方法
2020/07/31 Python
详解python程序中的多任务
2020/09/16 Python
python上下文管理器异常问题解决方法
2021/02/07 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
final, finally, finalize的区别
2012/03/01 面试题
英语专业毕业生求职简历的自我评价
2013/10/24 职场文书
会计专业毕业生推荐信
2013/11/05 职场文书
2014年党支部书记工作总结
2014/12/04 职场文书
考试作弊检讨
2015/01/27 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android