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计算一个文件里字数的方法
Jun 15 Python
TensorFlow高效读取数据的方法示例
Feb 06 Python
Flask web开发处理POST请求实现(登录案例)
Jul 26 Python
python批量赋值操作实例
Oct 22 Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 Python
Python+selenium点击网页上指定坐标的实例
Jul 05 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
python修改文件内容的3种方法详解
Nov 15 Python
python之列表推导式的用法
Nov 29 Python
Python Scrapy框架第一个入门程序示例
Feb 05 Python
Python实现冒泡排序算法的完整实例
Nov 04 Python
pytorch简介
Nov 11 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守护另一个php进程的例子
2015/02/13 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
JavaScript合并两个数组并去除重复项的方法
2015/06/13 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
Angular.js中处理页面闪烁的方法详解
2017/03/09 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
vue定义全局变量和全局方法的方法示例
2018/08/01 Javascript
Vue.js实现双向数据绑定方法(表单自动赋值、表单自动取值)
2018/08/27 Javascript
JavaScript对象原型链原理解析
2020/01/22 Javascript
微信小程序 获取手机号 JavaScript解密示例代码详解
2020/05/14 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
对变量赋值的理解--Pyton中让两个值互换的实现方法
2017/11/29 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
python pandas库中DataFrame对行和列的操作实例讲解
2018/06/09 Python
Python脚本修改阿里云的访问控制列表的方法
2019/03/08 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
html5 div布局与table布局详解
2016/11/16 HTML / CSS
美国乡村商店:Plow & Hearth
2016/09/12 全球购物
Lentiamo丹麦:购买便宜的隐形眼镜
2021/01/13 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
怎样创建、运行java程序
2014/08/01 面试题
2013的个人自我评价
2013/12/26 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
房屋出租委托书格式
2014/09/23 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
教你用Java在个人电脑上实现微信扫码支付
2021/06/13 Java/Android
springboot如何接收application/x-www-form-urlencoded类型的请求
2021/11/02 Java/Android
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript