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基础教程之lambda表达式使用方法
Feb 12 Python
Python列表生成器的循环技巧分享
Mar 06 Python
Python随手笔记之标准类型内建函数
Dec 02 Python
python记录程序运行时间的三种方法
Jul 14 Python
Python File readlines() 使用方法
Mar 19 Python
django解决订单并发问题【推荐】
Jul 31 Python
解决Python对齐文本字符串问题
Aug 28 Python
详解python statistics模块及函数用法
Oct 27 Python
python实现时间序列自相关图(acf)、偏自相关图(pacf)教程
Jun 03 Python
浅谈Python描述数据结构之KMP篇
Sep 06 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
Jan 07 Python
用python实现监控视频人数统计
May 21 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实现禁用IE和火狐的缓存问题
2012/12/03 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
在laravel框架中实现封装公共方法全局调用
2019/10/14 PHP
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
jquery中eq和get的区别与使用方法
2011/04/14 Javascript
jquery事件重复绑定的快速解决方法
2014/01/03 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
jQuery实现的指纹扫描效果实例(附演示与demo源码下载)
2016/01/26 Javascript
JavaScript位移运算符(无符号) >>> 三个大于号 的使用方法详解
2016/03/31 Javascript
JavaScript生成验证码并实现验证功能
2016/09/24 Javascript
bootstrap 表单验证使用方法
2017/01/11 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
常用的 JS 排序算法 整理版
2018/04/05 Javascript
vue项目中使用lib-flexible解决移动端适配的问题解决
2018/08/23 Javascript
vue自定义指令实现方法详解
2019/02/11 Javascript
vue element 生成无线级左侧菜单的实现代码
2019/08/21 Javascript
vue中的mescroll搜索运用及各种填坑处理
2019/10/30 Javascript
Python 实现简单的电话本功能
2015/08/09 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
canvas绘制图片drawImage使用方法
2020/09/15 HTML / CSS
捷克电器和DJ设备网上商店:Electronic-star
2017/07/18 全球购物
英国历史最悠久的DJ设备供应商:DJ Finance、DJ Warehouse、The DJ Shop
2019/09/04 全球购物
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
教师实习的自我鉴定
2013/10/26 职场文书
难忘的一天教学反思
2014/04/30 职场文书
违章停车检讨书
2014/10/21 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
结婚典礼致辞
2015/07/28 职场文书
JAVA SpringMVC实现自定义拦截器
2022/03/16 Python