类和对象是面向对象编程的两个核心概念。
0x01:类
类是对一群具有相同特征或者行为的事物的一个统称,是抽象的,不能直接使用
- 特征其实就是一个变量,在类里我们称之为属性。
- 行为其实就是一个函数,在类里我们称之为方法。
- 类其实就是由属性和方法组成的一个抽象概念。
例如:你在窗外看到一只鸟,这个鸟就是“鸟类”的一个实例。鸟类是一个非常通用(抽象)的类,你看到的鸟可能属于子类云雀,你可以 将“鸟类” 视为所有鸟的集合,而云雀是其中的一个子集。一个类的对象为另一个类的对象的子集时,前者就是后者的子类。
所以说 ” 云雀“ 是鸟类的子类。 而 鸟类 是云雀的超类。
类就相当于制造飞机时的图纸,是一个模板。这个模板只规定了飞机的某些特征(例如大小,颜色,型号等等)和行为(例如起飞,降落,飞行等等),它并不是一个具体的飞机,而是对飞机的一个抽象概念。它出现的目的,是为了让我们的创建飞机对象。
0x02:对象
对象是由类创建出来的一个具体存在,可以直接使用。由哪一个类创建出来的 对象,就拥有在哪一个类中定义的属性和方法。对象就相当于用图纸制造的飞机。在开发中,应该先有类,在类里定义好属性和行为,再根据类来创建对象。
0x03:类和对象的关系
- 类是模板,对象是根据类这个模板创建出来的,应该先有类,再有对象。
- 使用同一个类,能够创建出很多对象。
- 类中定义了什么属性和方法,对象中就有什么属性和方法。
- 不同对象对应的属性值也会不同。
例如:定义了一个狗类,这个狗类有以下属性:
- 品种
- 颜色
- 性别
- 名字
现在根据这个类创建出了两条狗,这两条狗分别是哈士奇、灰色、母、二哈和中华田园犬、黄色、公、旺财。我们发现,这两条狗都具有 品种、颜色、性别和名字这些属性,但是每条狗对应的属性值却不一样。
0x04:类的设计
在程序开发中,要设计一个类,通常需要满足一下三个要素:
- 类名这类事物的名字,安照大驼峰命名法(每个单词的首字母大写)起名。
- 属性这类事物具有什么样的特征。
- 方法这类事物具有什么样的行为。
定义类名
名词提炼法:分析整个业务流程,出现的名词,通常就是找到的类。
属性和方法的确定
- 对对象的特征描述,可以定义成属性
对象具有的行为(动词)可以定义成方法 ```python class Student(object): # 关注这个类有哪些特征和行为
在 init 方法里,以参数的形式定义特征,我们称之为属性
def init(self, name, age, height):
self.name = name
self.age = age
self.height = height
行为定义为一个个函数
def run(self):
print('正在跑步')
def eat(self):
print('正在吃东西')
使用 Student 类创建了两个实例对象 s1 s2
s1和s2都会有name,age,height属性,同时都有run和eat方法
s1 = Student(‘小明’, 18, 1.75) # Student() ==> 会自动调用 init 方法 s2 = Student(‘小美丽’, 17, 1.65)
根据业务逻辑,让不同的对象执行不同的行为
s1.run() s1.eat()
s2.eat()
```