python初学 类方法 实例方法 静态

今天为大家介绍类方法 实例方法 静态方法这三种在python中不同的方法

以下面的类定义为例:

# coding:utf-8

class A:
    count = 0
    def __init__(self, inst_name):
        self.inst_name = inst_name
        self.__class__.count += 1
    def inst_method(self):
        print '实例(%s):%s' % (self.__class__.count, self.inst_name)
    @classmethod              #类方法需要加的标注
    def class_method(cls):    #我们通常为类方法的第一个参数名定义为cls,但并不固定
        print cls.count
    @staticmethod             #静态方法需要加的标注
    def static_method():
        print 'hello'
a1,a2,a3,a4 = A('a1'),A('a2'),A('a3'),A('a4')
a1.inst_method()
a1.class_method() # 或 A.class_method()
a1.static_method() # 或 A.static_method()

类实例方法:第一个参数强制为类实例对象,可以通过这个类实例对象访问类属性,可以通过类实例对象的__class__属性访问类属性。

def inst_method(self):
    print '实例(%s):%s' % (self.__class__.count, self.inst_name)

类实例方法不需要标注,第一个参数必不可少,解析器自动会将类实例对象传给方法的第一个参数。

类的初始化方法__init__也是实例方法,在实例创建的时候自动调用。在这里每当初始化一个实例,就通过__class__来访问类属性count,是它加一,用来统计类的实例数。

def __init__(self, inst_name):
    self.inst_name = inst_name
    self.__class__.count += 1

类方法:第一个参数强制为类对象,可以通过这个类对象访问类属性,由于没有传入类实例对象,所以不能访问类实例属性。

@classmethod
def class_method(cls):
    print cls.count

类方法需要使用@classmethod标注,第一个参数必不可少,解析器自动会将类对象传给方法的第一个参数。

类静态方法:无法访问类属性、类实例属性、没有默认的第一个参数,其实跟类没什么关系,只是绑定在类命名空间下的函数而已。

@staticmethod
def static_method():
    print 'hello'

类静态方法通常用来定义一些和类主题相关的函数,静态方法需要使用@staticmethod标注

通过类对象可以调用类方法、类静态方法,但不可以调用类实例方法;通过类实例对象可以调用以上三种方法

a1,a2,a3,a4 = A('a1'),A('a2'),A('a3'),A('a4')
a1.inst_method()
a1.class_method() # 或 A.class_method()
a1.static_method() # 或 A.static_method()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值