classPerson(object):type='human'def__init__(self, name, age):
self.name = name
self.age = age
defeat(self, food):# 实例方法有一个参数self,指的是实例对象print(self.name +'正在吃'+ food)
p1 = Person('张三',18)
p1.eat('红烧牛肉泡面')# 直接使用实例对象调用方法
Person.eat(p1,'西红柿鸡蛋盖饭')
使用对象名.方法名(参数)调用的方式,不需要传递self。
使用类名.方法名(self, 参数)的方式,不会自动给self传参,需要手动的指定self。
二、类方法
如果一个方法只用到了类属性,我们可以把这个方法定义成为一个类方法。
需要用装饰器@classmethod来进行修饰。
类方法会有一个参数cls,这个参数cls指的是类对象。
不需要手动的传参,会自动传参。
类方法可以通过实例对象和类对象去访问,即对象名.类方法名()或类名.类方法名()
classPerson(object):type='human'def__init__(self, name, age):
self.name = name
self.age = age
@classmethoddeftest(cls):print(cls.type)
p1 = Person('张三',18)
p1.test()# human
Person.test()# human
使用场景
当方法中需要使用类对象(如访问私有类属性)时,定义为类方法。
类方法一般和类属性配合使用。
三、静态方法
如果一个方法里没有用到实例对象的任何属性,可以把这个方法定义成为静态方法。
需要通过装饰器@staticmethod来进行修饰。
静态方法既不需要传递类对象,也不需要传递实例对象(形参没有self/cls)。
静态方法也能够通过 实例对象和类对象去访问,即对象名.类方法名()或类名.类方法名()
classPerson(object):type='human'def__init__(self, name, age):
self.name = name
self.age = age
@staticmethoddefdemo():print('hello')
p1 = Person('张三',18)
Person.demo()# hello
p1.demo()# hello