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切片知识解析
Mar 06 Python
Python实现的文本编辑器功能示例
Jun 30 Python
Numpy掩码式数组详解
Apr 17 Python
Python多线程编程之多线程加锁操作示例
Sep 06 Python
Python二叉搜索树与双向链表转换算法示例
Mar 02 Python
python中dict使用方法详解
Jul 17 Python
python实现socket+threading处理多连接的方法
Jul 23 Python
利用Python库Scapy解析pcap文件的方法
Jul 23 Python
Xadmin+rules实现多选行权限方式(级联效果)
Apr 07 Python
Python是怎样处理json模块的
Jul 16 Python
Python识别验证码的实现示例
Sep 30 Python
python脚本框架webpy模板赋值实现
Nov 20 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 编程请选择正确的文本编辑软件
2006/12/21 PHP
PHP获取当前完整URL地址的函数
2014/12/21 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
php使用正则验证中文
2016/04/06 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
javascript实现上传图片并预览的效果实现代码
2011/04/11 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
angularjs中的e2e测试实例
2014/12/06 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
删除javascript所创建子节点的方法
2015/05/21 Javascript
JavaScript使用addEventListener添加事件监听用法实例
2015/06/01 Javascript
javascript表单验证大全
2015/08/12 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
2015/12/24 Javascript
设计模式中的facade外观模式在JavaScript开发中的运用
2016/05/18 Javascript
浅谈JavaScript变量的自动转换和语句
2016/06/12 Javascript
javascript中获取class的简单实现
2016/07/12 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
require.js+vue开发微信上传图片组件
2016/10/27 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
js实现带积分弹球小游戏
2020/07/21 Javascript
Python格式化日期时间操作示例
2018/06/28 Python
django与小程序实现登录验证功能的示例代码
2019/02/19 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
opencv python Canny边缘提取实现过程解析
2020/02/03 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
国际商务专业学生个人的自我评价
2013/09/28 职场文书
初二政治教学反思
2014/01/12 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
单位作风建设自查报告
2014/10/23 职场文书
同学聚会祝酒词
2015/08/10 职场文书
理解深度学习之深度学习简介
2021/04/14 Python