day 19
面向对象基础
什么是面对对象
指的是一门编程思想
面对对象编程
核心是“对象”二字,对象指的是特征与技能的结合体
基于该编程思想编写程序,就好比在创造世界,一种上帝式的思维方式
优点:可扩展性高
缺点:编写程序的复杂程度要远高于面向过程编程思想
面向过程编程
核心是“过程”二字,过程指的是做事情的步骤,即先做什么再做什么
基于该思想编写程序,就好比一条工厂流水线,一种机械化的思维方式
优点:逻辑清晰,复杂的问题流程化,进而简单化
缺点:可扩展性差
类
什么是类
对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体
如何定义类
首定义类,后调用类创造对象。
定义类的语法
def 函数名():
class 类名:
对象相同的特征
对象相同的技能
class: 用户定义类的,class后跟的是类名
类名:类的名字,用来调用创造对象的。
注意:类名必须要遵循驼峰命名法,python在定义变量与函数时不推荐使用,但在定义类时推荐使用
在定义类发生的事情
1.类在定义时,会产生一个空的名称空间
2.会把类内部所有名字,扔进类的名称空间中
注意:类在定义阶段就已经产生好了名称空间,执行python文件时会执行类内部的代码
学生类:
相同特征 --》 类内部的变量
school
相同技能 --》 类内部的函数
learn
choose_course
# 学生类
class OldStudent:
school = 'oldboy'
print('tank is handsome...')
# xxx
def learn(self):
print('learn python...')
def choose_course(self):
print('choose_course...')
# OldStudent --> 会指向类的名称空间
print(OldStudent.__dict__)
print(OldStudent.__dict__.get('school'))
对象
如何产生对象
语法:
类名 + () 调用类产生对象
名称空间的产生
1.类的名称空间在类定义阶段就已经产生了
2.对象的名称空间,在调用类时产生
# 学生类
class OldStudent:
# 若__init__中有self以外的参数,调用类时必须括号内传入参数
def __init__(self,x,y,z): # self --> 就是对象本身
# print(self,x,y,z)
# print('此处时__init__...')
# 给对象添加特征的方式
self.name = x
self.age = y
self,sex = z
# 特征
school = 'oldboy'
# print('tank is handsome...')
# 技能
def learn(self):
print('learn python...')
def choose_course(self): # self = None
print('choose_course...')
*******调用类发生的事情“
1.首先会产生一个空的对象,就是产生“对象的名称空间”。
2.会自动触发__init__.
3.会把对象本身以及括号内的参数一并传给__init__函数。
*******总结:调用类会产生一个对象,调用类的过程叫做类的实例化,产生的对象称之为类的一个实例。
对象与类的查找顺序
1.对象,属性。若对象本身有,则优先查找对象自己的。
2.若对象本身没有,则到类里面,若类也没有,则报错。
对象绑定方法的特殊之处
类内部的函数主要是给对象用的:
1.由类来调用类内部的函数,该函数只是一个普通的函数。
普通函数需要接收几个参数就得传入几个参数。
2.由对象来调用称之为对象的绑定方法,
不同的对象调用该绑定方法,则会将不同的对象传入该绑定方法中
****对象的绑定方法,是由对象来调用的,
特殊之处就是 把对象当作第一个参数传入该方法中
class OldStudent:
def __init__(self,name,age,sex):
self,name = name
self,age = age
self,sex = sex
# 特征
school = 'oldboy'
# 技能
def learn(self): # 普通函数
# print('stu',self)
print('learn python...')
def choose_course(self,course): # self =
print(f'[{self.name}]choose_course {course}...')
# 对象之间与类的方法功能是一样的