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检测手机QQ在线状态的脚本代码
Feb 10 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
python实现壁纸批量下载代码实例
Jan 25 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python将DataFrame的某一列作为index的方法
Apr 08 Python
Python学习_几种存取xls/xlsx文件的方法总结
May 03 Python
python操作excel的方法(xlsxwriter包的使用)
Jun 11 Python
python保存数据到本地文件的方法
Jun 23 Python
python中csv文件的若干读写方法小结
Jul 04 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
浅谈ROC曲线的最佳阈值如何选取
Feb 28 Python
Python基础 括号()[]{}的详解
Nov 07 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的header和asp中的redirect比较
2006/10/09 PHP
不错的一篇面向对象的PHP开发模式(简写版)
2007/03/15 PHP
老版本PHP转义Json里的特殊字符的函数
2015/06/08 PHP
PHP微信支付开发实例
2016/06/22 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
javascript中的括号()用法小结
2014/04/14 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
javascript如何操作HTML下拉列表标签
2015/08/20 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
简单实现jQuery轮播效果
2017/08/18 jQuery
angularjs性能优化的方法
2018/09/05 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python基于SMTP协议实现发送邮件功能详解
2018/08/14 Python
python框架中flask知识点总结
2018/08/17 Python
python实现简单名片管理系统
2018/11/30 Python
selenium在执行phantomjs的API并获取执行结果的方法
2018/12/17 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
Python如何计算语句执行时间
2019/11/22 Python
css3的focus-within选择器的使用
2020/05/11 HTML / CSS
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
后勤岗位职责
2013/11/26 职场文书
文言文形式的学生求职信
2013/12/03 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
法人代表证明书格式
2014/10/01 职场文书
大学生自荐书范文
2015/03/05 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
2016计算机专业毕业生自荐信
2016/01/28 职场文书
创业计划书之面包店
2019/09/12 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript