面向对象的编程思想(OOP),面向对象的编程思想与之前面向过程的编程思想不同。面向对象的编程思想着重强调要细分职责和工作。例如有加减乘除四个运算方法,我们需要处理的数据有实数和虚数,我们需要将这两种数据独立进行运算,那么此时我们就将这些四则运算的方法都分别封装在实数和虚数的对象中,这样我们需要计算数据时就直接使用对象里的方法即可。与面向过程的方式不同,面向过程着重强调需要什么任务就调用哪些方法,强调步骤性和先后顺序,这样当方法功能多时,容易造成混乱。
目录
类与对象
类与对象的定义:
创建类和对象:
初始化类和对象:
内置方法:
类与对象
类与对象的定义:
所谓类就是具有相同属性和行为的一类事物的模板,例如人就可以看为一个类,具有如吃饭,睡觉等行为,具有劳动、摸鱼等属性。对象就是根据这个类模板具体实例化出来的一个个“人”。
创建类和对象:
定义一个类的方法是使用class关键字,然后类似于函数那样输入类名和冒号,下面就写类里面的方法和属性。注意,这里的方法的第一个形参都要是self,如果后续再需要参数,则需要跟在self后面。这里的self参数与C++里类的this指针有点像,self参数是用来定位一个特定的对象的,就是我们创建一个类后可能不止创建一个对象,但是这些对象都要用同一个模板,此时我们模板里的方法就可以通过self来确定调用方法的是哪一个对象。
创建好一个类后,我们可以着手创建一个对象,对象的创建就是以 对象名 = 类名()的形式。其中我们每创建一个对象都与我们创建一个新的变量类似,我们的每个对象变量的名都是对某个对象的一种引用。所以如果我们创建多个对象,那么这些对象互不相同;而如果我们将一个对象赋给另一个对象,那么这两个对象则一样。例如下图创建一个学生类:
StuA = Info()
Python中创建一个类与C++中创建一个类比较相似:
Python:
class Info:
def func1(self):
print("hello,python")
def func2(self, func2_a):
return func2_a
StuA = Info()
StuA.func1()
C++:
class Info
{
public:
void func1()
{
cout<<"hello,world!" << endl;
}
int func2(int get)
{
this->a = get;
return get;
}
int a;
string s;
};
int main()
{
Info Stu1;
Stu1.func1();
return 0;
}
初始化类和对象:
当我们创建完一个类对象时,我们或许需要对这个对象的属性进行初始化设置,此时就需要用到类内置的方法:__init__。这个方法是不需要我们手动调用它也会在创建对象时调用的。其中我们创建类的属性时也是需要调用到这个初始化方法。具体定义一个属性是:self.属性名 = 数据,这样我们就可以得到一个类里的属性。
class Info:
def __init__(self):
self.name = "l"
self.age = 15
此时创建出来的属性就是所以此类对象拥有的共同属性。但是这种创建方法有一个问题,那就是每一个属性都需要有初始值,这样就比较固定了,要想更加灵活,我们可以像C++里的有参构造一样,给init方法指定形参,让属性接受形参,这样就可以实现多样化初始化了。
class Info:
def __init__(self, name, age):
self.m_name = name
self.m_age = age
StuA = Info("l", 19)
StuB = Info("h", 17)
既然有初始化对象,那就不得不提一下销毁对象,当我们创建完一个对象后,如果我们不需要继续用了,我们可能会使用del 函数来删掉这个对象,此时类就会自动调用__del__方法来对对象的内容进行删除,释放内存。
内置方法:
在类的内部是内置有很多的方法的,这些方法也可以理解为一个个的函数,这些方法都是可以适用于所有类的操作。要是想查看类的方法,我们可以利用dir函数。其中函数参数就是类名。
dir(Info)
下面就是我显示出来的类的内置方法:
不难发现,其实我们之前用的__init__和__del__方法都是一个类中的内置方法。下面我们来看看一个有意思的内置方法:__str__。这个方法有什么用呢?我们先来看看如果我们要用print函数输出对象,会得到什么?
我们可以发现,如果我们用print函数输出对象名,此时我们得到的会是一个地址,一个存储对象的内存地址,但是要是我们不想要这个输出呢?我们此时可以用__str__方法来调整我们利用print输出的字符串,这个方法需要我们返回一个新的字符串,这个字符串将作为print输出的新内容。