在C++的类中,有两种函数:普通成员函数和静态成员函数,差别是成员函数通过类实例调用,而静态成员函数通过类名调用。本质上,成员函数在调用的时候会默认把this指针作为第一个参数传入,而静态成员函数不需要绑定this指针。

在python的类设计中,可以说将C++的这种隐式行为显式的表达出来了。

class Test(object):
def __init__(self):
pass
def func1(self):
pass
@classmethod
def func2(cls):
pass
@staticmethod
def func3();
pass

普通实例成员函数在调用时会绑定self参数(也就是调用它的那个实例的引用)

类方法会绑定类名

静态方法完全不绑定

注意静态方法和类方法的定义需要向上面那样使用函数修饰符。当然你也可能在老代码里看到这种做法(是等效的):

class Test(object):
def __init__(self):
pass
def func1(self):
pass
def func2(cls):
pass
func2 = classmethod(func2)
def func3():
pass
func3 = staticmethod(func3)

python中的函数调用绑定,静态方法和类方法的更多相关文章

  1. python中的实例方法、静态方法、类方法、类变量和实例变量

    class MyTest: myname = 'peter' # add a instance attribute    def __init__(self, name):        self.n ...

  2. Python - 面向对象编程 - 实例方法、静态方法、类方法

    实例方法 在类中定义的方法默认都是实例方法,前面几篇文章已经大量使用到实例方法 实例方法栗子 class PoloBlog: def __init__(self, name, age): print( ...

  3. python学习日记(OOP——静态方法和类方法)

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

  4. python面向对象-3类的静态方法和类方法

    还是以上次的洗衣机例子: class Washer: company='ZBL' def __init__(self,water=10,scour=2): self._water=water #不想让 ...

  5. python中普通函数调用协程

    import asyncio def target(loop, timeout=None): future = asyncio.run_coroutine_threadsafe(add(1, b=2) ...

  6. python类的实例方法、静态方法和类方法区别及其应用场景

    https://blog.csdn.net/helloxiaozhe/article/details/79940321 普通实例方法,第一个参数需要是self,它表示一个具体的实例本身. 如果用了st ...

  7. Python中的属性管理

    Python管 理属性的方法一般有三种:操作符重载(即,__getattr__.__setattr__.__delattr__和 __getattribute__,有点类似于C++中的重载操作符).p ...

  8. 可爱的 Python : Python中函数式编程,第二部分

    英文原文:Charming Python: Functional programming in Python, Part 2,翻译:开源中国 摘要:  本专栏继续让David对Python中的函数式编 ...

  9. Python面试题之Python中的类和实例

    0x00 前言 类,在学习面向对象我们可以把类当成一种规范,这个思想就我个人的体会,感觉很重要,除了封装的功能外,类作为一种规范,我们自己可以定制的规范,从这个角度来看,在以后我们学习设计模式的时候, ...

随机推荐

  1. form表单控件

    $("select option[value='" + queryparams['vendor'] + "']").attr("selected&qu ...

  2. ajax获取数据库中数据

    xhr=new XMLHttpRequest(); var url="要获取数据的地方"; xhr.open('post',url,true); POST请求头(get就不用写这个 ...

  3. selenium+python笔记9

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ @desc: delete mail 我们多添加一些测试场景,比如:删 ...

  4. [mondrian] 分析一个简单的schema文件

    <?xml version="1.0" encoding="UTF-8"?> <Schema name="Mondrian" ...

  5. 在Linux下安装aws命令行操作

    使用安装包安装 环境: Linux, OS X, or Unix Python 2 version 2.6.5+ or Python 3 version 3.3+ 检查Python版本 $ pytho ...

  6. jQuery学习小结2——动画

    一.基础动画 方法名 说明 show([speed,[easing],[fn]])hide([speed,[easing],[fn]]) speed:三种预定速度之一的字符串("slow&q ...

  7. (置顶)js实现超过页面一屏后,点击图标滚动到页面顶部top

    <script type="text/javascript">$(document).ready(function() {    var ScrolltoTop = $ ...

  8. js数量添加(如购物车添加,删减数量)

    <div class="fl shop-num ml24"><input type="button" style=" border- ...

  9. Java 生成压缩包,ZipOutputStream的使用

    案例:根据url 获取网络资源A,B,C   将资源A,B,C放在一起生成一个xxx.zip 直接看代码 import java.io.File; import java.io.FileOutputS ...

  10. cisco 路由配置

    Cisco路由配置基础 刚刚接触cisco路由配置,下面是学习的笔记,感觉命令还是多敲才能熟悉 一. 所处状态各类 router> 用户处于用户命令状态,可以查看网络和主机 router# 用户 ...