面向对象的引出
1.我们会用字典定义一个两个宠物数据,例如战斗力,血量之类的。再次添加许多宠物呢?
2.我们就会觉得麻烦,由于定义他们的字典基本不变,再需要使用就可以封装成函数。
3.让不同类型的宠物拥有攻击的能力,就需要定义不同函数供不同类型宠物使用。
4.但是此时,特定的宠物类型虽然可以攻击了,但是可以调用封装好的其他类型宠物攻击。
5.此时会出现,调用乱套的情况,所以我们将不同类型的函数功能分别放到不同宠物类型。
6.需要攻击时,宠物只会调用自己类型的攻击函数。
- 此时我们实现了不同类型函数,调用不同功能的过程
- 什么是面对对象编程?
- 我们将数据与功能绑定到一起的操作起名为:'面向对象编程'
- 面对对象编程的本质?
- 将特定的数据与特定的功能绑定到一起 将来只能彼此相互使用
- 编程的思想
- 面向过程编程
- 面向过程编程其实就是按步骤执行一系列流程,最后得到结果
- 面向对象编程
- 面向对象编程的核心是对象,相当于提供了一个解决问题的具体方案。
- 面向对象编程就是当你创造一些事物后,后续问题无需处理
- 两种编程思想并无优劣之分,经常混合使用
对象与类的概念
- 对象的概念
- 对象的作用
- 类的概念
- 类的作用
- 在面向对象编程中 类仅仅是用于节省代码,对象才是核心
对象与类的创建
对象独有的数据
定义一个学生类
class Student:
school = '清华大学'
def choice_course(self):
print('正在选课')
- 一.直接利用__dict__方法朝字典添加键值对
- 但是缺点非常明显:需要我们收到输入,并且新添加一个学生就会输入一次,代码冗余,效率低下
self = Student()
self.__dict__['name'] = 'tom #与self1.name = 'tom'含有相同
print(self.name)
self1 = Student()
self1.__dict__['name'] = 'jack' #与self1.name = 'jack'含有相同
print(self1.name)
- 二.添加独有的代码封装成函数
- 虽然添加的代码变少了,但是还是需要我们每次添加姓名要重新用一个变量名,比较麻烦
def init(self,name)
self.__dict__['name] = name
stu0 = Student()
stu1 = Student()
init(stu0,'tom')
init(stu1,'jack')
print(stu0.__dict__)
print(stu1.__dict__)
- 三.面向对象思想,使用init函数创建独有的数据,将数据功能整合到一起
- 将函数封装到学生类中 这样只有学生类产生的对象才有资格访问,简洁省时省力
"""
1.先产生一个空对象
2.调用类里的__init__方法,把产生空对象当作第一个参数传入
3.将产生的对象返回出去
"""
class Student:
def __init__(self, name):
self.name = name
school = '清华大学'
def choice_course(self):
print('正在选课')
stu1 = Student('jason')
print(stu1)
stu2 = Student('kevin')
print(stu2)