Python 实例方法、类方法、静态方法的区别与作用

这三种方法都定义在类中。其中实例对象的权限最大。

下面这个类包含了这三种方法,从调用可以看出他们的用法。

class A(object):
    bar = 1
    def foo(self):
        print 'foo'

    @staticmethod
    def static_foo():
        print A.bar

    @classmethod
    def class_foo(cls):
        cls().foo()

A.static_foo()
A.class_foo()
a = A()
a.foo()

实例方法/对象方法

  • 定义:
  • 实例方法也称对象方法。是我们在类中定义的普通方法。
  • 第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);
  • 该方法的第一个形参接收的一定是对象本身
  • 调用:只能由实例对象调用
image

类方法

  • 定义:

    • 使用装饰器@classmethod。

    • 第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

  • 应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)。

  • 使用 可以是 对象名.类方法名。或者是 类名.类方法名

  • 调用:类对象或实例对象都可以调用。

class Person:
  type = '人类'
 
  @classmethod
  def test(cls):
    print(cls.type)
 
 
Person.test()

静态方法

  • 定义:使用装饰器@staticmethod。方法上面添加 。

  • 参数:静态方法可以有参数也可以无参数。没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

  • 应用场景:一般用于和类对象以及实例对象无关的代码。

  • 调用:

    类对象或实例对象都可以调用

    类名.类方法名(或者对象名.类方法名)。

class Game:
 
  @staticmethod
  def menu():
    print('------')
    print('开始[1]')
    print('暂停[2]')
    print('退出[3]')
 
 
Game.menu()

你可能感兴趣的:(Python 实例方法、类方法、静态方法的区别与作用)