面向对象
内容概要
- 面向对象介绍
- 实现面向对象编程
- 属性查找
内容详解
-
面向对象介绍
''' 面向过程 核心是'过程'二字 过程的终极奥义就是将程序流程化 过程是'流水线',用来分步骤解决的 面向对象 核心是'对象'二字 对象的终极奥义就是将程序'整合' 对象是'容器',用来盛放数据和功能的 类也是'容器',该容器用来存放同类对象共有的数据和功能 ''' # 程序 = 数据+功能 -
实现面向对象编程
# 先定义类 # 类是对象相似数据与功能的集合体 # 所以类体中最常见的是变量与函数的定义,但是类体其实是可以包含任意其他代码的 # 注意:类体代码是在类定义阶段就会立即执行的,会产生类的名称空间 # 再调用类产出对象 # # 一、先定义类 # class Student: # # 1.变量的定义: # stu_school = 'oldboy' # # # 2.功能的定义 # def tell_stu_info(stu_obj): # print('学生信息:名字:%s 年龄:%s 性别:%s '%( # stu_obj['stu_name'], # stu_obj['stu_age'], # stu_obj['stu_gender'] # )) # # def set_info(stu_obj,x,y,z): # stu_obj['stu_name'] = x # stu_obj['stu_age'] = y # stu_obj['stu_gender'] = z # print(Student.__dict__) # # 属性访问的语法 # # 1.访问数据属性 # print(Student.stu_school) # print(Student.__dict__['stu_school']) # # 2.访问函数属性 # print(Student.set_info) # print(Student.__dict__['set_info']) # 二、再调用类产生对象 # stu1_obj = Student() # stu2_obj = Student() # stu3_obj = Student() # 为对象定制自己独有的属性 # 问题1:代码重复 # 问题2:属性的查找顺序 # stu1_obj.stu_name = 'ycc' # stu1_obj.stu_age = 18 # stu1_obj.stu_gender = 'male' # print(stu1_obj.__dict__) # # stu2_obj.stu_name = 'xixi' # stu2_obj.stu_age = 19 # stu2_obj.stu_gender = 'female' # print(stu2_obj.__dict__) # # # stu3_obj.stu_name = 'jason' # stu3_obj.stu_age = 18 # stu3_obj.stu_gender = 'male' # print(stu3_obj.__dict__) # 解决问题一: # def init(obj,stu_name,stu_age,stu_gender): # obj.stu_name = stu_name # obj.stu_age = stu_age # obj.stu_gender = stu_gender # # init(stu1_obj,'ycc',18,'male') # init(stu2_obj,'xixi',19,'female') # init(stu3_obj,'jason',20,'male') # print(stu1_obj.__dict__) # print(stu2_obj.__dict__) # print(stu3_obj.__dict__) # 二、解决问题二: # 1、先定义类 class Student: # 1.变量的定义: stu_school = 'oldboy' # 空对象,'ycc', 18, 'male' def __init__(obj,stu_name,stu_age,stu_gender): obj.stu_name = stu_name # 空对象.stu_name = 'ycc' obj.stu_age = stu_age # 空对象.stu_age = 18 obj.stu_gender = stu_gender # 空对象.stu_gender = 'male' # 2.功能的定义 def tell_stu_info(stu_obj): print('学生信息:名字:%s 年龄:%s 性别:%s '%( stu_obj['stu_name'], stu_obj['stu_age'], stu_obj['stu_gender'] )) def set_info(stu_obj,stu_name,stu_age,stu_gender): stu_obj['stu_name'] = stu_name stu_obj['stu_age'] = stu_age stu_obj['stu_gender'] = stu_gender # 2、再调用类产生对象 # 调用类的过程又称之为实例化,发生了三件事 # 1、先产生一个空对象 # 2、python会自动调用类中的__init__方法将空对象已经调用类时括号内传入的参数一同传给__init__方法 # 3.返回初始完的对象 stu1_obj = Student('ycc',18,'male') # Student.__init(空对象,'ycc',18,'male') stu2_obj = Student('xixi',19,'female') stu3_obj = Student('jason',20,'male') print(stu1_obj.__dict__) print(stu2_obj.__dict__) print(stu3_obj.__dict__) # 总结__init__方法 # 1、会在调用类时自动触发执行,用来为对象初始化自己独有的数据 # 2、__init__内应该存放是为对象初始化属性的功能,但是是可以存放任意其他代码, # 想要在类调用时就立刻执行的代码都可以放到该方法内 # 3、__init__方法必须返回None -
属性查找
class Student: # 1.变量的定义: stu_school = 'oldboy' # 空对象,'ycc', 18, 'male' def __init__(self,stu_name,stu_age,stu_gender): self.stu_name = stu_name # 空对象.stu_name = 'ycc' self.stu_age = stu_age # 空对象.stu_age = 18 self.stu_gender = stu_gender # 空对象.stu_gender = 'male' # 2.功能的定义 def tell_stu_info(self): print('学生信息:名字:%s 年龄:%s 性别:%s '%( # stu_obj['stu_name'], # stu_obj['stu_age'], # stu_obj['stu_gender'] self.stu_name, self.stu_age, self.stu_gender )) def set_info(self,stu_name,stu_age,stu_gender): # stu_obj['stu_name'] = stu_name # stu_obj['stu_age'] = stu_age # stu_obj['stu_gender'] = stu_gender self.stu_name = stu_name self.stu_age = stu_age self.stu_gender = stu_gender def choose(self,x): print('正在选课') self.course = x stu1_obj = Student('ycc',18,'male') stu2_obj = Student('xixi',19,'female') stu3_obj = Student('jason',20,'male') # 类中存放的是对象共有的数据和功能 # 一、类可以访问: # 1.类的数据属性 # print(Student.stu_school) # # 2.类的函数属性 # print(Student.set_info) # print(Student.tell_stu_info) # 二、但其实类中的东西是给对象用的 # 1、类的数据属性是共享给所有对象用的,大家访问的地址都一样 # print(stu1_obj.stu_name) # print(stu1_obj.stu_age) # print(stu1_obj.stu_gender) # print(stu1_obj.stu_school) # 查找顺序,先在对象内找,让后去类里找 # print(Student.stu_school) # oldboy # print(stu1_obj.stu_school) # oldboy # print(stu2_obj.stu_school) # oldboy # print(stu3_obj.stu_school) # oldboy # # print(id(Student.stu_school)) # 1464557583344 # print(id(stu1_obj.stu_school)) # 1464557583344 # print(id(stu2_obj.stu_school)) # 1464557583344 # print(id(stu3_obj.stu_school)) # 1464557583344 # Student.stu_school = 'OLDBOY' # print(Student.stu_school) # OLDBOY # print(stu1_obj.stu_school) # OLDBOY # print(stu2_obj.stu_school) # OLDBOY # print(stu3_obj.stu_school) # OLDBOY # stu1_obj.stu_school = 'OLDBOY' # print(Student.stu_school) # oldboy # print(stu1_obj.stu_school) # OLDBOY # print(stu2_obj.stu_school) # oldboy # print(stu3_obj.stu_school) # oldboy # 查找顺序先对象后类,这里直接在对象内新建了一个 # # 2.类的函数属性是绑定给对象用的 # print(Student.tell_stu_info) # print(Student.set_info) # # # Student.tell_stu_info(stu1_obj) # Student.tell_stu_info(stu2_obj) # Student.tell_stu_info(stu3_obj) # # 学生信息:名字:ycc 年龄:18 性别:male # # 学生信息:名字:xixi 年龄:19 性别:female # # 学生信息:名字:jason 年龄:20 性别:male # # Student.set_info(stu1_obj,'YCC',20,'male') # Student.tell_stu_info(stu1_obj) # # 学生信息:名字:YCC 年龄:20 性别:male # 绑定方法的特殊之处在于:谁来调用绑定方法就会将谁当作第一个参数自动传入 # stu1_obj.tell_stu_info() # stu2_obj.tell_stu_info() # stu3_obj.tell_stu_info() # 学生信息:名字:ycc 年龄:18 性别:male # 学生信息:名字:xixi 年龄:19 性别:female # 学生信息:名字:jason 年龄:20 性别:male # stu1_obj.choose('python') # print(stu1_obj.course) # stu2_obj.choose('linux') # print(stu2_obj.course) # stu3_obj.choose('高级架构师') # print(stu3_obj.course) # 例: l1 = ['aa','bb','cc'] l2 = [11,22,33] print(l1.append('dd')) # print(l1) # print(list.append(l1)) # list.append() takes exactly one argument (0 given) # list.append(l1,'dd') # ['aa', 'bb', 'cc', 'dd'] # list.append(l2,'dd') # [11, 22, 33, 'dd'] # print(l1) # print(l2)

浙公网安备 33010602011771号