类方法与静态方法

方法

方法是通过 def 申明创造的函数
方法的工作方式与简单的函数一样。但是有种例外的情况:方法的第一个参数接受的是实例对象。

1, 实例方法:

def f(self, *arg)

2, 类方法:使用类属性

@classmethod
def cf(cls, *arg)

3,静态方法:不包含任何有关类的信息

@staticmethod
def sf(*arg)

对于实例方法的工作原理类似类方法。实际上,python自动映射实例方法调用到类方法。即:

instance.method(args,...)

将自动转换为类方法的调用:

class.method(instance, args,...)
class A(object):
    def method(self, num)
        print(num)

a = A()
a.method(4)
# 4

A.method(a, 4)
# 4

类方法与实例方法

假设有如下类以及实例方法:

class A(object):
    message = "class message"

    @classmethod
    def cf(cls):
        print(cls.message)

    def f(self, msg):
        self.message = msg
        print(self.message)

    def __str__(self):
        return self.message

由于f()是实例方法,通过实例来调用;

a = A()
a.f("instance call")
# instance call

a调用f()时,python将自动替换self为实例对象 a 。

对于类方法,直接通过类名来调用:

A.cf()
# class message

message 是类的属性。

1, 绑定方法:
实例方法:上面定义的类中的 f()
类方法:上面定义的类中的 cf()

```
a.f
# <bound method A.f of <__main__.A object at 0x1066de7b8>>
A.cf
# <bound method A.cf of <class '__main__.A'>>
a.cf
# <bound method A.cf of <class '__main__.A'>>

```

2, 非绑定方法:对于类调用:

```
A.f
# <function A.f at 0x106850400>
```

静态方法

常见静态方法的定义为:

class B(object):
    @staticmethod
    def foo():
        pass

以上定义与以下等同:

class B(object):
    def foo():
        pass
    foo = staticmethod(foo)

假设有一个典型的实例计数程序:

class count(object):
    nInstances = 0 
    def __init__(self):
        count.nInstances = count.nInstances + 1

    @staticmethod
    def mun_instances():
        print("number of instances :", count.nInstances)

a = count()
b = count()
c =count()
#实例化在不断修改类的属性。

count.mun_instances()
#类调用
#number of instances : 3

a.mun_instances()
#实例调用
#number of instances : 3   

a.num_instances
#<function count.num_instances at 0x106850598>
# 即静态类也是非绑定方法,函数

参考文章

CLASS METHOD VS STATIC METHOD 2016

http://www.bogotobogo.com/python/python_differences_between_static_method_and_class_method_instance_method.php

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值