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

来源:互联网 发布:日工作计划软件 编辑:程序博客网 时间:2024/06/05 03:38

静态方法和实例方法

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

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
原创粉丝点击