一、实例方法(对象方法) 类中的方法默认都是实例方法。 class Person ( object ): type = 'human' def __init__ ( self , name , age ): self . name = name self . age = age def eat ( self , food ): # 实例方法有一个参
一、实例方法(对象方法)
- 类中的方法默认都是实例方法。
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指的是类对象。
- 不需要手动的传参,会自动传参。
- 类方法可以通过实例对象和类对象去访问,即对象名.类方法名()或类名.类方法名()
type = 'human'
def __init__(self, name, age):
self.name = name
self.age = age
def test(cls):
print(cls.type)
p1 = Person('张三', 18)
p1.test() # human
Person.test() # human
- 使用场景
- 当方法中需要使用类对象(如访问私有类属性)时,定义为类方法。
- 类方法一般和类属性配合使用。
三、静态方法
- 如果一个方法里没有用到实例对象的任何属性,可以把这个方法定义成为静态方法。
- 需要通过装饰器@staticmethod来进行修饰。
- 静态方法既不需要传递类对象,也不需要传递实例对象(形参没有self/cls)。
- 静态方法也能够通过实例对象和类对象去访问,即对象名.类方法名()或类名.类方法名()
type = 'human'
def __init__(self, name, age):
self.name = name
self.age = age
def demo():
print('hello')
p1 = Person('张三', 18)
Person.demo() # hello
p1.demo() # hello
- 使用场景
- 当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法。
- 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗。