Python中的实例方法、类方法、静态方法
一、实例方法(对象方法)
类中的方法默认都是实例方法。
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
使用场景
- 当方法中既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法。
- 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗。
还没有评论,来说两句吧...