按照字面名称来理解的话:

实例方法就是实例化对象的方法,绑定在实例对象上

类方法就是类自己的方法,不需要实例化对象,类自己就是对象,直接绑定在类上

静态方法就是普通的函数,函数作为对象,不过是封装在类的内部,通过类.方法引用

从参数上看:

实例方法默认参数是self

类方法默认参数是cls

静态方法可以没有

举个例子:

class Test():

    def a(self):
print(self.a) @classmethod
def b(cls):
print(cls.b) @staticmethod
def c():
print(Test.c)

实例化一个对象

tmp = Test()
tmp.a()
tmp.b()
tmp.c() 输出:
<bound method Test.a of <__main__.Test object at 0x02145110>>
<bound method Test.b of <class '__main__.Test'>>
<function Test.c at 0x021424F8>

直接通过类去调用(以类本身为对象)

Test.a()
Test.b()
Test.c() 输出:
TypeError: a() missing 1 required positional argument: 'self'
<bound method Test.b of <class '__main__.Test'>>
<function Test.c at 0x021D24F8>

类自己实例化

print(Test())
print(Test)
Test().a()
Test().b()
Test().c() 输出
<__main__.Test object at 0x006E50B0>
<class '__main__.Test'>
<bound method Test.a of <__main__.Test object at 0x006E5790>>
<bound method Test.b of <class '__main__.Test'>>
<function Test.c at 0x006E24F8> 这里Test()与Test().a()在内存中对象不同,是因为一个是类对象,一个是实例方法对象

简单来说,@classmethod就是不用实例化,直接用类内部的方法;@staticmethod则是为封装类好看,为了满足强迫症,把方法装进类里面,实际大家都可以用

python中实例方法,类方法,静态方法简单理解的更多相关文章

  1. Python的实例方法,类方法,静态方法之间的区别及调用关系

    如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是 ...

  2. 【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)

    在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...

  3. python中self cls init的理解

    原创文章,未经允许禁止转载! python中self cls init的理解 python中self cls init的理解

  4. Python中关于csv的简单操作

    Python中关于csv的简单操作 CSV操作简单,直接import csv即可, 主要使用reader和pandas 1 reader的简单使用 csv.reader("1.csv&quo ...

  5. Python中关于txt的简单读写模式与操作

    Python中关于txt的简单读写操作 常用的集中读写模式: 1.r 打开只读文件,该文件必须存在. 2.r+ 打开可读写的文件,该文件必须存在. 3.w 打开只写文件,若文件存在则文件长度清为0,即 ...

  6. C#中事件流程的简单理解

    C#中事件流程的简单理解 C#中事件基于委托,要理解事件要先理解委托,但是现在我还没想好怎么写委托,如果不懂委托可以先找找委托的文章 事件基于委托,为委托提供了一种发布/订阅机制 一上来就是这句话,很 ...

  7. Python中的类方法、实例方法、静态方法

    类方法 @classmethod 在python中使用较少,类方法传入的第一个参数是 cls,是类本身: 类方法可以通过类直接调用或者通过实例直接调用,但无论哪种调用方式,最左侧传入的参数一定是类本身 ...

  8. python中,类方法和静态方法区别。

    面相对象程序设计中,类方法和静态方法是经常用到的两个术语. 逻辑上讲:类方法是只能由类名调用:静态方法可以由类名或对象名进行调用. 在C++中,静态方法与类方法逻辑上是等价的,只有一个概念,不会混淆. ...

  9. Python Class 的实例方法/类方法/静态方法

    实例方法.类方法.静态方法 class MyClass(object): class_name = "MyClass" # 类属性, 三种方法都能调用 def __init__(s ...

随机推荐

  1. 【DP合集】背包 bound

    N 种物品,第 i 种物品有 s i 个,单个重量为 w i ,单个价值为 v i .现有一个限重为 W 的背包,求能容 纳的物品的最大总价值. Input 输入第一行二个整数 N , W ( N ≤ ...

  2. numpy.rollaxis函数

    numpy.rollaxis numpy.rollaxis 函数向后滚动特定的轴到一个特定位置,格式如下: numpy.rollaxis(arr, axis, start) 参数说明: arr:数组 ...

  3. RF作用与目的

    robotframework自动化原理:通过ride工具编写脚本,加载指定的UI测试库,再通过pybot程序去运行指定脚本,调用浏览器驱动,打开浏览器,操作浏览器页面元素,达到模拟用户操作的行为 为什 ...

  4. java普通项目打包成可执行jar文件时如何添加第三包

    在java的web项目中,引用第三方包的时候非常简单.因为在web项目上中,默认有一个web-inf文件夹.web-inf文件夹下有一个lib文件夹,如果有用到第三方包,直接丢进去就行了.但是对于普通 ...

  5. wwindows权限认识(用户及用户组)

    windows权限认识(用户及用户组) Windows系统内置了许多本地用户组,这些用户组本身都已经被赋予一些权限(permissions),它们具有管理本地计算机或访问本地资源的权限.只要用户账户加 ...

  6. Cocos2d-x 学习笔记(7) 内存管理 Sprite SpriteFrame Texture2D

    1. 总结 Sprite和SpriteFrame和Texture2D关系紧密,三个类都继承了Ref类.精灵有成员精灵帧和纹理,精灵帧有成员纹理.精灵帧和纹理被精灵帧引用时,引用计数增加,不再被引用时, ...

  7. 将 so|JNI|NDK 之间的关系说明白

    最近在了解公司历史的发展,发现了公司产品中几乎都要使用 so 文件,不禁好奇这个 so 到底是何方神圣. so 文件 so 是 shared object 的缩写,见名思义就是共享的对象,机器可以直接 ...

  8. 【MongoDB详细使用教程】二、MongoDB基本操作

    目录 数据类型 数据库操作 集合操作 数据操作 增 查 改 修改整行 修改指定字段的值 删 数据类型 MongoDB常见类型 说明 Object ID 文档ID String 字符串,最常用,必须是有 ...

  9. JavaScript Array返回值以及是否改变原数组。

    1.        push:最后一位新增://改变原数组         arr.push("123");         返回值是数组的长度:         var b =  ...

  10. ASP.NET Core中的配置

    配置 参考文件点击跳转 配置来源 命令行参数 自定义提供程序 目录文件 环境变量 内存中的.NET 对象 文件 默认配置 CreateDefaultBuilder方法提供有默认配置,在这个方法中会接收 ...