💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 什么是面向对象 之前我们学习了函数,通过函数将一些特定的逻辑封装起来。这种将代码组织起来的方式也叫过程式编程。我们今天学习的面向对象编程则将程序做了更高维度的封装,用人类更容易理解的方式编程。 ## 类&实例 中国道德经有一句话:*道生一,一生二,二生三,三生万物*,讲的是世间的万物都是从特定的模板里生出来的。这个模板就是类,生出来的东西就是对象。 我们来看几个案例: ![](https://s1.ax1x.com/2018/08/30/PjrfEV.png) 宠物狗有很多种:泰迪、金毛、哈士奇 都属于狗科动物。狗本身是一个模板(类)。狗作为一个**类**,拥有尾巴、腿、耳朵等身体**器官**;可以执行跑、叫等**动作**。泰迪、金毛、哈士奇 是从狗模板“生出来的”,因此它们也拥有这些属性。泰迪、金毛、哈士奇 就是狗这个类的**实例**。 ![](https://s1.ax1x.com/2018/08/30/Pjro34.png) 汽车也有很多种,公交车、轿车、越野车都属于汽车。汽车本身是一个模板(类),汽车作为一**类**,拥有方向盘、发动机、车身、最大时速等**属性**;可以执行发动、变方向、鸣笛等**方法**。公交车、轿车、越野是从汽车模板“生出来”的,因此,他们也拥有这些构造。公交车、轿车、越野车就是汽车这个类的**实例**。 看过上面这两个例子,对什么是是类、什么是实例有没有一个形象的了解呢?下面我们看看用python怎么表达类和实例吧。 ## 在python里定义类 在python中定义一个类可以参照下面的语法: ~~~ class Dog: pass #类代码 ~~~ 我们用 class关键字定义一个类,注意类的名字用首字母大写的单词来组成,为什么要首字母大写呢?我们下面会解释。 ## python里对类实例化 定义好类,接下来通过类来构建实例了。看代码: ~~~ teddy = Dog() print(teddy) ~~~ 我们定义了一个变量`teddy`,Dog()方法就是定义一个类的实例。`print(teddy)`会输出 `<__main__.Dog object at 0x1041019e8>` 我们把类的首字母大写,就不会把类和实例搞乱了。 ## 实例属性 类在定义好后,会拥有一个__init__方法。这个方法是当依照这个类构建实例的时候被调用的,我们来看代码: ~~~ class Dog: def __init__(self): # 尾巴、腿、耳朵 self.tail = 'small' self.leg = 'long' self.ear = 'stand' teddy = Dog() print(teddy.leg) ~~~ 在__init__方法里,有一个self参数,这个参数用来表达实例本身。那里面的 `self.tail`、`self.leg` 就是实例属性了。类的每个实例有自己的属性。比如泰迪的尾巴是短的、耳朵是下垂的。而哈士奇的尾巴是长的,尾巴是立起来的。 ## 方法 除了属性外,类还有方法。我们来看代码: ~~~ class Dog: def __init__(self, name): # 尾巴、腿、耳朵 self.tail = 'small' self.leg = 'long' self.ear = 'stand' self.name = name def call(self): print("汪汪", self.name) teddy = Dog('teddy') husky = Dog('husky') teddy.call() husky.call() ~~~ `call` 函数是类的方法,每个实例都会有这个方法。方法定义中会有默认的self参数,用来代表实例自己。这个代码还可以印证每个实例有自己的属性。 ## 类属性 除了实例属性外,还有类属性。看代码: ~~~ class Dog: dogCount = 0 def __init__(self, name): # 尾巴、腿、耳朵 self.tail = 'small' self.leg = 'long' self.ear = 'stand' self.name = name Dog.dogCount += 1 def call(self): print("汪汪", self.name) teddy = Dog('teddy') teddy.call() print(Dog.dogCount) husky = Dog('husky') husky.call() print(Dog.dogCount) ~~~ dogCount 是Dog类的属性,类属性从属于类。每次改版类属性的值都会反映的所有的实例上。 ![](http://www.runoob.com/wp-content/uploads/2016/05/animals.png) 这节课我们讲了面向对象,面向对象是编程里很核心的概念。一定要能够有清晰的理解,怎么样,小朋友们掌握了吗? **阿达老师-孩子身边的编程专家** ``` class Yingxiong(): def __init__(self): self.zhanji = '' self.xueliang = 2000 self.jineng = '' def gongji(self): print('平A') yase = Yingxiong() yase.xueliang = 4000 yase.gongji() anqila = Yingxiong() anqila.xueliang = 2000 ```