一、什么是类(class)
实际是从class翻译过来的,按照传统的翻译方法,为我们应该翻译为“班”,但是为什么这里叫做“类”呢?
我们设想一下,现在你经营一家玩具厂,现在你要生产一批玩具娃娃产品,要求这些产品都要有一些相同的功能例如:说话、动起来、互动等等。但是这些娃娃不一定都是一模一样的,你可以联动其他的动画公司,然后出同名款大卖。
这里设计到了我们的类,这些娃娃本质上的功能是一样的,只是外套不一样,也就是说我们实际上拥有这个娃娃的内部原理图(如何实现这些功能的蓝图),那么我们就可以根据不同的外壳设计出这些娃娃,这个内部的蓝图就是我们的类,契合“类似”的意思
二、如何搭建我们的类
在python当中我们的类用到的关键词即我们的class,下面举一个简单的例子:
class Point:
def __init__(self, name, age):
self.name = name
self.age = age
def print_point(self):
print(self.name, self.age)
Point_1 = Point("van", 20)
Point_1.print_point()
1、__init__(self, x, y)
这是一个特殊的方法(构造方法),用于处理我们的对象,self指我们的对象本身(Point_1),后面的数据并不需要我们在前面给出定义,而是在这里(指__init__)我们就可以直接定义我们需要的一些数据类型(对象的属性),后进行赋值操作(这里有点像我们C语言的结构体的赋值操作),我们给出的"van", 20即我们的name与age
2、调用
我们在一个类里面可以有非常多的函数选择来处理我们的对象,那么我们如果想对对象进行一些处理的话,我们可以指定某个函数进行处理,例如上面的例子中我们就选择了print_point来操作
这里需要注意一点,我们不能写成这个样子:
def print_point(self):
print(name, age)
这里的name与age是之前构造方法里面的参数,在其他方法中我们没法再次进行调用,这里我们选择self.name与self.age,这是由于这些实例属性可以在其他方法中继续被访问
三、继承
现在有一个案例:有一家大公司开发出了一款内部软件,要给下面的100家旗下小公司使用,现在这家大公司采取的办法是将这个软件的源代码分别给到100家小公司下面让他们自己打包使用,但是很快就发现了不对劲:
每次需要对软件更新升级都需要将告知100家小公司如何去修改或者调整这些源代码,耗费大量的效率。那么大公司就采取了直接将软件打包下载到每个小公司上,这样每次更新的时候直接在大公司里面完成源代码的修改,小公司的软件自动跟着升级即可
python当中也是一样的,例如我们现在有非常多的类,这些类都有相同的一些操作:
class Dog:
def walk(self):
print("walk")
def bark(self):
print("bark")
class Cat:
def walk(self):
print("walk")
def sleep(self):
print("sleep")
class Pig:
def walk(self):
print("walk")
def eat(self):
print("eat")
那么我们如果想要修改每个class里面的walk方法,是不是非常麻烦,于是就有了继承的出现:
python当中允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以复用父类的代码,并且可以在此基础上添加或修改功能。上面的代码修改如下:
class Common:
def walk(self):
print("walk")
class Dog(Common):
def bark(self):
print("bark")
class Cat(Common):
def sleep(self):
print("sleep")
class Pig(Common):
def eat(self):
print("eat")
Common即我们的父类,这时我们就可以挟天子以令诸侯,只要对Common进行修改就可以控制所有的子类中的walk方法了:例如
class Common:
def walk(self):
print("walk")
class Dog(Common):
def bark(self):
print("bark")
class Cat(Common):
def sleep(self):
print("sleep")
class Pig(Common):
def eat(self):
print("eat")
Pig_1 = Pig()
Pig_1.walk()
输出的结果就是: