Python中的实例方法、类方法、静态方法

迷南。 2023-07-08 09:21 88阅读 0赞

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

  • 类中的方法默认都是实例方法。

    class Person(object):

    1. type = 'human'
    2. def __init__(self, name, age):
    3. self.name = name
    4. self.age = age
    5. def eat(self, food): # 实例方法有一个参数self,指的是实例对象
    6. print(self.name + '正在吃' + food)
  1. p1 = Person('张三', 18)
  2. p1.eat('红烧牛肉泡面') # 直接使用实例对象调用方法
  3. Person.eat(p1, '西红柿鸡蛋盖饭')
  • 使用对象名.方法名(参数)调用的方式,不需要传递self。
  • 使用类名.方法名(self, 参数)的方式,不会自动给self传参,需要手动的指定self。

二、类方法

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

    class Person(object):

    1. type = 'human'
    2. def __init__(self, name, age):
    3. self.name = name
    4. self.age = age
    5. @classmethod
    6. def test(cls):
    7. print(cls.type)
  1. p1 = Person('张三', 18)
  2. p1.test() # human
  3. Person.test() # human
  • 使用场景

    • 当方法中需要使用类对象(如访问私有类属性)时,定义为类方法。
    • 类方法一般和类属性配合使用。

三、静态方法

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

    class Person(object):

    1. type = 'human'
    2. def __init__(self, name, age):
    3. self.name = name
    4. self.age = age
    5. @staticmethod
    6. def demo():
    7. print('hello')
  1. p1 = Person('张三', 18)
  2. Person.demo() # hello
  3. p1.demo() # hello
  • 使用场景

    • 当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法。
    • 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读