您的位置:首页 > 编程语言 > Python开发

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

2016-01-14 10:08 756 查看

静态方法和实例方法

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

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: