python是面向对象语言,而什么是面向对象呢,就是把一切看成对象(实例),对象和对象之间用方法(行为)建立关联关系
什么是类:
拥有相同属性和行为的对象分为一组,即为一个类
类是用来描述对象的工具
类的作用:
可以用类创建一个或多个此类的对象(实例)
类内的变量和方法能被此类所创建的所有实例所共同拥有
什么是对象:
是指现实中的物体或实例
简单举例:
class Foo():
Species = '动物'#类属性
def __init__(self,name):
self.name = name#实例属性
def func(self, x):
print('实例方法')
@classmethod
def class_foo(cls):
print('类方法')
@staticmethod
def static_foo():
print('静态方法')
f = Foo('老鼠')
#调用实例方法
f.func()
#调用类方法
Foo.class_foo()
#调用静态方法
Foo.static_foo()
定义一个类Foo,就相当于在内存中创建了一个类对象Foo的内存空间,类空间中有Species(类属性),实例方法,静态方法,类方法;而创建一个实例对象f,意味着在内存中有创建了一个实例对象的内存空间,实例空间中有name(实例属性)还有属于自己的方法,而其中的__class__是指向类对象的,表示这个实例属于哪个类,一个类对象可以有多个实例对象;
区别
实例方法,类方法,静态方法都属于类,区别在于调用方式不同;
实例方法:
实例对象调用,至少有一个参数self(表示实例对象),执行实例方法时,自动将该调用方法的对象赋值给self(self其实是引用调用的实例对象)
类方法(@classmethod装饰):
类和实例对象都可以调用;至少有一个参数cls(表示类);自动将调用该方法的对象赋值给cls(cls其实是引用当前类)
静态方法(@staticmethod装饰)
类和实例对象都可以调用,没有默认参数;其实它存在和外部定义函数没有区别,但是为什么这么定义下面会说;
实例对象可以调用类方法,静态方法,实例方法;
类对象只能调用类方法,静态方法;
应用场景说明
类属性是共有的,而实例属性是实例独有的,如果想要修改属性就会有对应的方法(类方法和实例方法),而静态方法的定义上面说过,作用和平常函数没有区别,但是,假设在外部定义对应静态方法的一个普通函数,如果存在多个类都想调用此函数,哪定义这个方法就会有歧义(函数是为了哪个类定义的),而定义静态方法的出发点是:不需要传入特定的参数,功能简单,和类方法和实例方法归为一类;
如果理解的不是很清楚,可以观看:https://www.bilibili.com/video/av50979957?from=search&seid=3682306859886449416