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 相关文章推荐
PyQt5每天必学之带有标签的复选框
Apr 19 Python
flask中的wtforms使用方法
Jul 21 Python
python使用百度文字识别功能方法详解
Jul 23 Python
python实现身份证实名认证的方法实例
Nov 08 Python
python装饰器代替set get方法实例
Dec 19 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
Jan 10 Python
PyTorch实现AlexNet示例
Jan 14 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
python如何保存文本文件
Jun 07 Python
详解Python设计模式之策略模式
Jun 15 Python
解决python3安装pandas出错的问题
May 20 Python
python分分钟绘制精美地图海报
Feb 15 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
超级简单的发送邮件程序
2006/10/09 PHP
生成php程序的php代码
2008/04/07 PHP
php多功能图片处理类分享(php图片缩放类)
2014/03/14 PHP
PHP fastcgi模式上传大文件(大约有300多K)报错
2014/09/28 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
WordPress中的shortcode短代码功能使用详解
2016/05/17 PHP
使用PHP开发留言板功能
2019/11/19 PHP
FormValid0.5版本发布,带ajax自定义验证例子
2007/08/17 Javascript
Javascript 入门基础学习
2010/03/10 Javascript
精通Javascript系列之数据类型 字符串
2011/06/08 Javascript
js中通过split函数分割字符串成数组小例子
2013/09/21 Javascript
JavaScript使用ActiveXObject访问Access和SQL Server数据库
2015/04/02 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JavaScript数据操作_浅谈原始值和引用值的操作本质
2016/08/23 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
vue 实现全选全不选的示例代码
2018/03/29 Javascript
详解Vue中数组和对象更改后视图不刷新的问题
2018/09/21 Javascript
如何在Vue中使用CleaveJS格式化你的输入内容
2018/12/14 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
vue使用nprogress实现进度条
2019/12/09 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
浅析Python多线程下的变量问题
2015/04/28 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
使用Python对Excel进行读写操作
2017/03/30 Python
Python入门学习指南分享
2018/04/11 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
入党申请人的自我鉴定
2013/12/01 职场文书
药学专业个人的自我评价
2013/12/31 职场文书
年度考核自我鉴定
2014/03/19 职场文书
婚前协议书怎么写
2014/04/15 职场文书
优秀大学生自荐信
2014/06/09 职场文书
红领巾广播站广播稿(3篇)
2014/09/20 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
同学聚会感言一句话
2015/07/30 职场文书
大学迎新生欢迎词
2015/09/29 职场文书
社区结对共建协议书
2016/03/23 职场文书