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中splitlines()方法的使用简介
May 20 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
python基于pygame实现响应游戏中事件的方法(附源码)
Nov 11 Python
python中set()函数简介及实例解析
Jan 09 Python
Python元组及文件核心对象类型详解
Feb 11 Python
Pandas:Series和DataFrame删除指定轴上数据的方法
Nov 10 Python
华为校园招聘上机笔试题 扑克牌大小(python)
Apr 22 Python
使用Python调取任意数字资产钱包余额功能
Aug 15 Python
浅谈在django中使用redirect重定向数据传输的问题
Mar 13 Python
python对指定字符串逆序的6种方法(小结)
Apr 02 Python
Python OrderedDict字典排序方法详解
May 21 Python
python3实现名片管理系统(控制台版)
Nov 29 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
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
一次因composer错误使用引发的问题与解决
2019/03/06 PHP
php中使用array_filter()函数过滤数组实例讲解
2021/03/03 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
javascript基本数据类型及类型检测常用方法小结
2016/12/14 Javascript
JS碰撞运动实现方法详解
2016/12/15 Javascript
原生js实现放大镜
2017/02/20 Javascript
JS实现的自动打字效果示例
2017/03/10 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
详解Vue学习笔记进阶篇之列表过渡及其他
2017/07/17 Javascript
webpack构建vue项目的详细教程(配置篇)
2017/07/17 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
jQuery替换节点元素的操作方法
2018/03/18 jQuery
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
jQuery移动端跑马灯抽奖特效升级版(抽奖概率固定)实现方法
2019/01/18 jQuery
详解VUE前端按钮权限控制
2019/04/26 Javascript
[26:24]完美副总裁、DOTA2负责人蔡玮专访:电竞如人生
2014/09/11 DOTA
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
Python 数值区间处理_对interval 库的快速入门详解
2018/11/16 Python
python中的global关键字的使用方法
2019/08/20 Python
python调用Matplotlib绘制分布点图
2019/10/18 Python
HTML5 FileReader对象的具体使用方法
2020/05/22 HTML / CSS
Otticanet意大利:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
某公司.Net方向面试题
2014/04/24 面试题
物理教育专业毕业生推荐信
2013/11/03 职场文书
大学生活学习的自我评价
2013/12/03 职场文书
土地租赁意向书
2014/07/30 职场文书
企业法人代表证明书
2014/09/27 职场文书
党员个人剖析材料
2014/09/30 职场文书
索尼ICF-36收音机评测
2022/04/30 无线电
ubuntu20.04虚拟机无法上网的问题及解决
2022/12/24 Servers