Python中常用的三种方法:
1. 实例方法 (常见函数)
2. 静态方法 (@staticmethod)
3. 类方法 (@classmethod)
实例方法
定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
调用:只能由实例对象调用。
类方法
定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它性来传递类的属和方法(不能传实例的属性和方法);
调用:实例对象和类对象都可以调用。
静态方法
定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用实例的任何属性和方法,使用类的属性和方法需要使用类对象引用;
调用:实例对象和类对象都可以调用。
一、区别
二、代码示例
#!/usr/bin/env python # -*- coding:utf-8 _*- __author__ = '池偏一' ''' @author:shz @license: Apache Licence @file: testargs.py @time: 2018/06/19 @site: @software: PyCharm ''' import sys reload(sys) sys.setdefaultencoding('utf-8') class Test(object): # 测试类属性 name = 'jwh' # 测试实例属性 def __init__(self): self.age = 30 self.address = '上海' # 测试私有实例方法 def __instances(self): print "this is test instance" # 测试实例方法 def instances_pub(self): school = '复旦大学' print school @classmethod def testclass(cls): job = 'dev' print job # -*-------------------------*- # # 该实例方法调用其他测试内容,看是否能成功 def func(self): print Test.name # 传递类属性 print self.name # 传递实例属性 print self.age # 传递实例属性 self.__instances() # 传递实例方法 self.instances_pub() # 传递实例方法 self.testclass() # 传递类方法 @classmethod def class_func(cls): print cls.name # 传递类属性 cls.testclass() # 传递类方法 Test.testclass() # 传递类方法 try: print cls.address except AttributeError: print '类方法不能传递实例属性' try: cls.__instances() # 传递实例方法 except TypeError: print '类方法不能传递实例方法' try: cls.instances_pub() # 传递实例方法 except TypeError: print '类方法不能传递实例方法' @staticmethod def static_func(): try: print Test.name # 传递类属性 except AttributeError: print '静态方法不能传递类属性' try: Test.testclass() # 传递类方法 except: print '静态方法不能传递类方法' try: print Test.address # 传递实例属性 except AttributeError: print '静态方法不能传递实例属性' try: Test.__instances() # 传递实例方法 except TypeError: print '静态方法不能传递实例方法' try: Test.instances_pub() # 传递实例方法 except TypeError: print '静态方法不能传递实例方法' # -*-------------------------*- #
2.1
测试实例方法的传递和实例对象调用
try: t = Test() t.func() except TypeError, e: print "不能使用实例对象调用"
2.2
测试实例方法的传递和类对象的调用
try: Test.func() except TypeError, e: print "不能使用类对象调用"
2.3
测试类方法的传递和实例对象调用
try: t = Test() t.class_func() except TypeError, e: print '不能使用实例对象调用'
2.4
测试类方法的传递和类对象调用
try: Test.class_func() except TypeError, e: print '不能使用类对象调用'
2.5
测试静态方法的传递和实例对象调用
try: t = Test() t.static_func() except TypeError: print "不能使用实例对象调用"
2.6
测试静态方法的传递和类对象调用
try: Test.static_func() except TypeError: print "不能使用类对象调用"
来源:https://www.cnblogs.com/cpy-devops/p/9287340.html