首页 > 编程语言 >Python高级-静态方法和类方法的根本区别-笔记

Python高级-静态方法和类方法的根本区别-笔记

时间:2022-12-01 14:06:34浏览次数:43  
标签:调用 静态方法 name Python self 笔记 实例 方法 属性

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高级-静态方法和类方法的根本区别-笔记_类方法_02

对比

  • 相同点:对于所有的方法而言,均属于类,所以 在内存中也只保存一份
  • 不同点:方法调用者不同、调用方法时自动传入的参数不同。

标签:调用,静态方法,name,Python,self,笔记,实例,方法,属性
From: https://blog.51cto.com/chen8866/5901841

相关文章

  • Python高级-property属性-笔记
    1.property属性1.什么是property属性一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法################定义###############classFoo:deffunc(self......
  • Python高级-魔法属性-笔记
    无论人或事物往往都有不按套路出牌的情况,Python的类属性也是如此,存在着一些具有特殊含义的属性,详情如下:1.__doc__表示类的描述信息classFoo:"""描述类信息,这是用于看......
  • Python高级-面向对象设计-笔记
    继承-是基于Python中的属性查找(如X.name)多态-在X.method方法中,method的意义取决于X的类型封装-方法和运算符实现行为,数据隐藏默认是一种惯例参考实例腾讯即时通信模......
  • Python高级-with与“上下文管理器”-笔记
    如果你有阅读源码的习惯,可能会看到一些优秀的代码经常出现带有“with”关键字的语句,它通常用在什么场景呢?今对于系统资源如文件、数据库连接、socket而言,应用程序打开这......
  • (笔记)VHDL/Verilog之CRC(循环冗余校验)计算
     背景:我们在使用VHDL或Verilog进行FPGA开发时,经常会遇到CRC校验计算的情况,如校验公式为:G(x)=X8+X4+X3+X2+1G(x)=X3+X+1 那使用VHDL或Verilog语言该如何......
  • 使用python玩转二维码!速学速用!⛵
    ......
  • Python之文件操作
    Python之文件的操作操作文件之读文件第一种:f=open(r'd:\python\test\a.txt','r',encoding='utf8')print(f.read())f.close()此种方法在调用以后,必须加一个c......
  • 利用Python手把手带上实现冒泡排序
    前言之前写过一篇关于Python算法分析的文章--《​​利用Python浅尝算法分析​​》,想要学好计算机,数据结构和算法几乎是无法回避的课题,因为我们学习编程第一节课老师都会......
  • JavaScript笔记之面向对象
    面向对象了解构造函数原型对象的语法特征,掌握JavaScript中面向对象编程的实现方式,基于面向对象编程思想实现DOM操作的封装。了解面向对象编程的一般特征掌握基于......
  • python连接数据库
    一、python连接mysqlpython连接MySQL使用pymysql库。1、安装:pipinstallpymysql2、代码importpymysql#建立连接db=pymysql.connect(host="127.0.0.1",port=3306......