“老奶奶”的python学习笔记(12)
知识体系
第12关:面向对象编程
知识点
面向对象编程(Object Oriented Programming) 是一种以对象为中心的编程思想,它在软件设计、数据库设计、网络结构设计、人工智能算法等领域有着非常广泛的应用。
概念:类与对象
类:class
不同的数据类型就属于不同的类
可以用“type()”函数来辨别
比如: print(type('1')) # '1'属于字符串类'str'
print(type(1)) # 1属于整数类'int'
print(type([1])) # [1]属于列表类'list'
实例 (instance)
在Python的术语里,我们把类的个例就叫做实例 (instance),可理解为“实际的例子”。 我理解:比如1和2就是整数类的实例
类是某个特定的群体,实例是群体中某个具体的个体。它们之间的关系类似于:群体和个体。群体里的每个个体都有着相同/相似的特征和行为。
对象
Python中的对象等于类和实例的集合
类对象
实例对象
基础用法:类的创建与调用
用代码制造对象:类和实例的创建
类与类之间的区别
1、事物是什么?有什么特征 对应编程里的:属性(即what)
2、事物能做什么?有哪些行为和作用 对应编程里的:方法(即how)
Python里的每个类都有自己独特的属性(attribute)和方法(method),是这个类的所有实例都共享的。换言之,每个实例都可以调用类中所有的属性和方法。
与现实世界的属性和方法是在对客观实在抽象总结得来的不同,编程中的属性和方法是我们自己创建的
如何自定义一个类:类的创建
实例方法的创建语句,和函数的定义语句很类似,唯一不同的是:实例方法中有个必须放在首位的参数self(定义时不能丢,调用时要忽略)
除此之外,类名的首字母要大写
类的调用
类的调用,就是将类实例化,即在某一个类下创建一个实例对象。
比如:
class Computer:
screen = True
def start(self):
print('电脑正在开机中……')
my_computer = Computer()#这一句就是类的实例化,是类的调用
print(my_computer.screen)#属性的调用,调用的语法是“实例名.属性”
my_computer.start()#方法的调用,调用的语法是“实例名.方法”
创建和调用三步骤
创建一个类 —— 类的实例化 —— 用实例调用类的属性和方法
类的两个关键点
特殊参数:self
作用: self会接收实例化过程中传入的数据,当实例对象创建后,实例便会代替 self,在代码中运行。
self的作用相当于先给实例占了个位置,等到实例创建好就“功成身退,退位让贤”。
我们需要记住两点:
第一点:只要在类中用def创建方法时,就必须把第一个参数位置留给 self,并在调用方法时忽略它(不用给self传参)
第二点:当在类的方法内部想调用类属性或其他方法时,就要采用self.属性名或self.方法名的格式
举例:
class Chinese:
def greeting(self):
print('很高兴遇见你')
def say(self):
self.greeting()
print('我来自中国')
person = Chinese() # 创建实例person
person.say() # 调用say()方法
初始化方法(也叫构造函数)
定义初始化方法的格式
def __init__(self)
是由init加左右两边的【双】下划线组成( initialize “初始化”的缩写)
初始化方法的作用
当每个实例对象创建时,该方法内的代码无须调用就会自动运行。
比如:
class Chinese:
def __init__(self):
print('很高兴遇见你,我是初始化方法')
person = Chinese() #》》其结果是:“很高兴遇见你,我是初始化方法”。
在只是创建了实例,还没有调用时,初始化方法就自动执行了!
除了设置固定常量,初始化方法同样可以接收其他参数,让传入的这些数据能作为属性在类的方法之间流转
class Chinese:
def __init__(self, name, birth, region):
self.name = name # self.name = '吴枫'
self.birth = birth # self.birth = '广东'
self.region = region # self.region = '深圳'
def born(self):
print(self.name + '出生在' + self.birth)
def live(self):
print(self.name + '居住在' + self.region) person = Chinese('吴枫','广东','深圳') # 传入初始化方法的参数
person.born()
person.live()
思维进阶:面向对象编程
与面向对象编程相对应的是面向过程编程,这是这关以前的关卡里我们所采用的编程思维。
面向过程编程:
首先分析出解决问题所需要的步骤(即“第一步做什么,第二步做什么,第三步做什么”),然后用函数实现各个步骤,再依次调用。
而面向对象编程,会将程序看作是一组对象的集合。用这种思维设计代码时,考虑的不是程序具体的执行过程(即先做什么后做什么),而是考虑先创建某个类,在类中设定好属性和方法,即是什么和能做什么。接着,再以类为模版创建一个实例对象,用这个实例去调用类中定义好的属性和方法即可。
面向对象编程,将代码具体的数据和处理方法都封装在类中,让我们不用完全了解过程也可以调用类中的各种方法。
这个优势让我们可以在 Python 中轻松地调用各种标准库、第三方库和自定义模块(可以简单理解成别人写好的类),这是Python 之所以这么强大和热门的主要原因之一。