Python学习笔记——实例方法和静态方法

静态方法和实例方法

实例的方法就是在类中定义的函数

class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身。在class中定义类方法,要加@classmethod;定义静态方法要加@staticmethod

类方法:方法的第一个参数都是类对象而不是实例对象(cls)

区别主要体现在两个方面:
1. 在外部调用静态方法时,可以使用”类名.方法名”的方式,也可以使用”对象名.方法名”的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。
2. 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制。
3. 类方法可以被对象调用,也可以被实例调用;传入的都是类对象,主要用于工厂方法,具体的实现就交给子类处理
4. 静态方法参数没有实例参数 self, 也就不能调用实例参

class Fun(object):
    __count = 0
    def __init__(self,path=''):
        self.path = path
        Fun.__count += 1
    #静态方法    
    @staticmethod
    def users(n):
        Fun.n = n
        return Fun.n
    #实例方法
    def jobs(self,work):
        return Fun('%s' % work)
    #类方法
    @classmethod
    def count(cls):
        return cls.__count
     #定制类(特殊方法)
    def __str__(self):
        return self.path
    __repr__ = __str__
#调用
print Fun.count()
print Fun().jobs('job')
print Fun.users('Tom'print Fun.count()

结果:
0
job
Tom
2

类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用。
类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数。

class Chain(object):
    def __init__(self,path='/users'):
        self.path = path
    def users(self,path):
        return Chain('%s/%s' % (self.path,path))
    def __getattr__(slef,path):
        return Chain('%s/%s' % (self.path,path))
    def __str__(self):
        return self.path
    __repr__ = __str__
print Chain().users('Tom').etc.list

结果:
/users/Tom/etc/list

class Chian(object):
    def __init__(self,path=''):
        self.path = path
    def __getattr__(self,path):
        return Chain('%s/%s' % (self.path,path))
    def __str__(self):
        return self.path
    def __call__(self,name):
        return Chain('GET %s/:%s' %(self.path,name))
print Chain().users('tom').etc.list

结果
GET /users/:tom/etc/list

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值