2.10
面向对象基本概念
?
学前疑问
当你看到一盏台灯,你会自然地知道它能“打开”或“调节亮度”,而无需了解内部的电路细节。这种将“事物”和它的“行为”捆绑在一起的直觉,正是面向对象编程(OOP) 的核心思想——但编程如何将这种直觉转化为代码逻辑?推文将带你解开这一谜题。
1
(1)面对对象中两个比较重要概念
对象
对象,object,现实业务逻辑的一个动作实体就对应着OOP编程中的一个对象!
OOA:面向对象分析
OOD:面向对象涉及
OOP:面向对象编程
所以:
① 对象使用属性(property)保存数据!
② 对象使用方法(method)管理数据!
类
对象如何产生?又是如何规定对象的属性和方法呢?
答:在Python中,采用类(class)来生产对象,用类来规定对象的属性和方法!也就是说,在Python中,要想得到对象,必须先有类!
为什么要引入类的概念?
答:类本来就是对现实世界的一种模拟,在现实生活中,任何一个实体都有一个类别,类就是具有相同或相似属性和动作的一组实体的集合!所以,在Python中,对象是指现实中的一个具体的实体,而既然现实中的实体都有一个类别,所以,OOP中的对象也都应该有一个类!
一个对象的所有应该具有特征特性信息,都是由其所属的类来决定的,但是每个对象又可以具有不同的特征特性信息,比如,我自己(人类)这个对象,名字叫老王,性别男,会写代码,会教书;另一个对象(人类)可能叫赵薇,性别女,会演戏,会唱歌!
(2)类的定义
在Python中,我们可以有两种类的定义方式:Python2(经典类)和 Python3(新式类)
经典类:不由任意内置类型派生出的类,称之为经典类
class 类名: # 属性 # 方法
class 类名:
# 属性
# 方法
新式类:
class 类名(): # 属性 # 方法
class 类名():
这就是一个类,只不过里面什么都没有!其中,类名不区分大小写,遵守一般的标识符的命名规则(以字母、数字和下划线构成,并且不能以数字开头),一般为了和方法名相区分,类名的首字母一般大写!(大驼峰法)
基本语法:
class Person(): # 属性 # 方法(函数) def eat(self): print('我喜欢吃零食') def drink(self): print('我喜欢喝饮料')
class Person():
# 方法(函数)
def eat(self):
print('我喜欢吃零食')
def drink(self):
print('我喜欢喝饮料')
(3)类的实例化(创建对象)
类的实例化就是把抽象的事务具体为现实世界中的实体。
类的实例化就是通过类得到对象!
类只是对象的一种规范,类本身基本上什么都做不了,必须利用类得到对象,这个过程就叫作类的实例化!
对象名 = 类名()
在其他的编程语言中,类的实例化一般是通过new关键字实例化生成的,但是在Python中,我们不需要new关键字,只需要类名+()括号就代表类的实例。
案例:把Person类实例化为为对象p1
# 1、定义一个类class Person(): # 定义相关方法 def eat(self): print('我喜欢吃零食') def drink(self): print('我喜欢喝饮料')p1 = Person()p1.eat()p1.drink()
# 1、定义一个类
# 定义相关方法
p1 = Person()
p1.eat()
p1.drink()
(4)类中的self关键字
self也是Python内置的关键字之一,其指向了类实例对象本身。
# 1、定义一个类class Person(): # 定义一个方法 def speak(self):print(self)print('Nice to meet you!')# 2、类的实例化(生成对象)p1 = Person()print(p1)p1.speak()p2 = Person()print(p2)p2.speak()
# 定义一个方法
def speak(self):
print(self)
print('Nice to meet you!')
# 2、类的实例化(生成对象)
print(p1)
p1.speak()
p2 = Person()
print(p2)
p2.speak()
今日学习完毕,课后作业:
定义一个简单的学生类,要求:
① 定义一个名为 Student的类;
② 类中定义一个方法 study,该方法打印:"我正在学习";
③ 类中定义另一个方法 play,该方法打印:"我正在玩游戏";
④ 创建 Student类的对象,并分别调用这两个方法。