一、实例方法(对象方法)

  • 类中的方法默认都是实例方法。
class Person(object):
type = 'human'

def __init__(self, name, age):
self.name = name
self.age = age

def eat(self, food): # 实例方法有一个参数self,指的是实例对象
print(self.name + '正在吃' + food)


p1 = Person('张三', 18)
p1.eat('红烧牛肉泡面') # 直接使用实例对象调用方法
Person.eat(p1, '西红柿鸡蛋盖饭')
  • 使用​​对象名.方法名(参数)​​调用的方式,不需要传递self。
  • 使用​​类名.方法名(self, 参数)​​的方式,不会自动给self传参,需要手动的指定self。

二、类方法

  • 如果一个方法​只用到了类属性​,我们可以把这个方法定义成为一个类方法。
  • 需要用装饰器​​@classmethod​​来进行修饰。
  • 类方法会有一个参数​​cls​​​,这个参数​​cls​​指的是类对象。
  • 不需要手动的传参,会自动传参。
  • 类方法可以通过​实例对象​和​类对象​去访问,即​​对象名.类方法名()​​​或​​类名.类方法名()​
class Person(object):
type = 'human'

def __init__(self, name, age):
self.name = name
self.age = age

@classmethod
def test(cls):
print(cls.type)


p1 = Person('张三', 18)
p1.test() # human
Person.test() # human
  • 使用场景
  • 当方法中​需要使用类对象​(如访问私有类属性)时,定义为类方法。
  • 类方法一般和类属性配合使用。

三、静态方法

  • 如果一个方法里​没有用到实例对象的任何属性​,可以把这个方法定义成为静态方法。
  • 需要通过装饰器​​@staticmethod​​来进行修饰。
  • 静态方法既不需要传递类对象,也不需要传递实例对象(形参没有​​self/cls​​)​。
  • 静态方法也能够通过​实例对象​和​类对象​去访问,即​​对象名.类方法名()​​​或​​类名.类方法名()​
class Person(object):
type = 'human'

def __init__(self, name, age):
self.name = name
self.age = age

@staticmethod
def demo():
print('hello')


p1 = Person('张三', 18)
Person.demo() # hello
p1.demo() # hello
  • 使用场景
  • 当方法中​既不需要使用实例对象​(如实例对象,实例属性),​也不需要使用类对象​(如类属性、类方法、创建实例等)时,定义静态方法。
  • 取消不需要的参数传递​,有利于​减少不必要的内存占用和性能消耗​。