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
相关文章推荐
- python watchdog:监控文件系统事件的Python库
- python 排列组合
- Python“Non-ASCII character 'xe5' in file”报错问题
- Python 第一篇:python简介和入门
- Python集合
- Python字符串格式编辑
- numpy中多维数组的轴(axis)
- python开发学习-day02(元组、字符串、列表、字典深入)
- Python list 排序
- Python字典
- python几个特别函数map filter reduce lambda
- [python]My Unique JsonDiff算法——如何计算2个json串之间的差距并Diff出来(一):编辑距离(Levenshtein)算法
- python 函数形参四种格式
- numpy数据类型dtype转换
- python2编码总结
- Python实现BWT算法()
- Python 版的 Nmon 分析器:让你远离 excel 宏
- python Django模板的使用方法
- Python2.x与Python3.x的区别
- 5种Python单例模式的实现方式