Python中的classmethod与staticmethod

首先,这是一个经典的问题。

我们首先做一个比较:

classmethod的第一个参数是cls,即调用的时候要把类传入

这意味着我们我们可以在classmethod里使用类的属性,而不是类的实例的属性(显式创建可用)

staticmethod,调用的时候没有参数,即调用的时候我们不传入东西(类,类的实例)

这意味着我们在staticmethod里无法得到类的实例(显式创建可用)

而我们调用类的普通方法的时候,要把self传进去

这意味着在这个普通方法里,我们只能使用类的实例(self)的属性方法

至于怎么调用呢?看下面:

class A(object):
    bar = 1
    def foo(self):
        print ‘foo‘  

    @staticmethod
    def static_foo():
        print ‘static_foo‘
        print A.bar    # static_foo位于class A中,A相当于全局的,所以能访问到A的属性
      A().foo() # static_foo位于class A中,A相当于全局的,所以能访问到A的方法
    @classmethod
    def class_foo(cls):
        print ‘class_foo‘
        print cls.bar  # 等于调用 A.bar
        cls().foo()     # 等于调用 A().foo()

A.static_foo()
A.class_foo()  

输出:

static_foo, 1,foo

class_foo,1,foo

一目了然

原文地址:https://www.cnblogs.com/geeklove01/p/8213687.html

时间: 2024-10-03 23:59:47

Python中的classmethod与staticmethod的相关文章

Python 中的 classmethod 和 staticmethod

类中最常用的方法是实例方法, 即通过通过实例作为第一个参数的方法. 举个例子,一个基本的实例方法就向下面这个: class Kls(object): def __init__(self, data): self.data = data def printd(self): print(self.data) ik1 = Kls('arun') ik2 = Kls('seema') ik1.printd() ik2.printd() 这会给出如下的输出:arunseema 然后看一下代码和示例图片:

Python中的@classmethod

[email protected] 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 2.普通对象方法至少需要一个self参数,代表类对象实例 3.类方法有类变量cls传入,从而可以用cls做一些相关的处理.并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类. 对于类方法,可以通过类来调用,就像C.f(),有点类似C++中的静态方法, 也可以通过类的一个实例来调用

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

在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义静态方法,刚接触的时候不太明白,Stack Overflow提供了一个比较方便理解的解释,Stack Overflow回答. 但是看完还是不太理解,于是自己写了个实例: class stclass(): d=1 #对象方法 def imethod(self): print(self) print("

Python中的staticmethod和classmethod

在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表类对象实例 类方法有类变量cls传入,从而可以用cls做一些相关的处理.并且有子类继承时,调用该类方法时,传入的类变量cls是子类,而非父类. 对于类方法,可以通过类来调用,就像C.

浅谈python中的一般方法、静态方法(staticmethod)和类方法(classmethod)

我们先来简单谈谈python类中一般方法.静态方法和类方法的区别. 1.类中的一般方法 一般方法在定义的时候,需要有表示类实例的参数(通常以self表示,例如def foo(self,arg1,arg2--)),一般方法不能通过类名.方法名()来调用,必须先创建类的实例,然后通过实例.方法名()来调用. 2.类中的静态方法 类中的静态方法用"@staticmethod"来修饰,静态方法在定义的时候,不需要表示类的实例,可想类外的方法定义一样.静态方法可以通过类名.方法名()和实例.方法

Python中classmethod与staticmethod区别

classmethod:类方法staticmethod:静态方法 在python中,静态方法和类方法都是可以通过类对象和类对象实例访问.但是区别是: @classmethod 是一个函数修饰符,它表示接下来的是一个类方法,而对于平常我们见到的则叫做实例方法. 类方法的第一个参数cls,而实例方法的第一个参数是self,表示该类的一个实例. 普通对象方法至少需要一个self参数,代表类对象实例 类方法有类变量cls传入,从而可以用cls做一些相关的处理.并且有子类继承时,调用该类方法时,传入的类变

python中@classmethod @staticmethod区别

Python中3种方式定义类方法, 常规方式, @classmethod修饰方式, @staticmethod修饰方式. class A(object): def foo(self, x): print("executing foo(%s,%s)" % (self, x)) print('self:', self) @classmethod def class_foo(cls, x): print("executing class_foo(%s,%s)" % (cl

python中classmethod与staticmethod的差异及应用

类中三种函数的应用 #!/usr/bin/env python # -*- coding: utf-8 -*- class TClassStatic(object): def __init__(self, data): self.data = data def printself(*arg): # for item in arg: # print item.data print("printself: ", arg) @staticmethod def smethod(*arg): p

python中 staticmethod与classmethod

原文地址https://blog.csdn.net/youngbit007/article/details/68957848 原文地址https://blog.csdn.net/weixin_35653315/article/details/78165645 原文地址https://www.cnblogs.com/1204guo/p/7832167.html 在Python里, 在class里定义的方法可以大致分为三类: 实例方法, 类方法与静态方法. 用一个表格总结如下: 方法类型 修饰 调用