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实现类似ftp传输文件的网络程序示例
Apr 08 Python
python使用socket进行简单网络连接的方法
Apr 29 Python
python使用wmi模块获取windows下的系统信息 监控系统
Oct 27 Python
如何利用Fabric自动化你的任务
Oct 20 Python
对python 矩阵转置transpose的实例讲解
Apr 17 Python
python实现寻找最长回文子序列的方法
Jun 02 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
用Python实现筛选文件脚本的方法
Oct 27 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
django ManyToManyField多对多关系的实例详解
Aug 09 Python
Django中的cookie和session
Aug 27 Python
python网络编程之多线程同时接受和发送
Sep 03 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 date()日期时间函数详解
2010/05/16 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
js 深拷贝函数
2008/12/04 Javascript
js/html光标定位的实现代码
2013/09/23 Javascript
JS关闭窗口与JS关闭页面的几种方法小结
2013/12/17 Javascript
创建、调用JavaScript对象的方法集锦
2014/12/24 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
javascript结合Flexbox简单实现滑动拼图游戏
2016/02/18 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
JS组件系列之JS组件封装过程详解
2017/04/28 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
AJAX XMLHttpRequest对象创建使用详解
2020/08/20 Javascript
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
python命令行参数用法实例分析
2019/06/25 Python
python通过http下载文件的方法详解
2019/07/26 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
python实现简单俄罗斯方块
2020/03/13 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
python3实现简单飞机大战
2020/11/29 Python
python 实现IP子网计算
2021/02/18 Python
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
俄罗斯化妆品和香水网上商店:Iledebeaute
2019/01/03 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
执行力心得体会
2013/12/31 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
深入详解JS函数的柯里化
2021/06/09 Javascript
MySQL query_cache_type 参数与使用详解
2021/07/01 MySQL
Python内置包对JSON文件数据进行编码和解码
2022/04/12 Python