学习目标:
- 一周掌握python入门知识
学习内容:
目录
1.面向过程和面向对象区别
了解到面向对象与面向过程的本质区别,面向过程本质是步骤,面向对象本质是对象。
而面向对象就是是一种编程思维(找一个对象帮你干活)
2.面向对象三大特性
三大特性: 封装 继承 多态 封装: 把属性和方法隐藏到类中,对外提供公共的接口 继承: 子类默认能够使用父类的属性和方法 多态: 同一种事物不同的形态
3.类和对象
类: 是一类事物的统称,是一个抽象的概念 对象: 是类的具体体现,是一个实际存在的事物 类和对象的关系: 先定义类,再根据类去创建对象
4.定义类和创建对象
知识点:
定义类的格式: class 类名(): ... 创建对象的格式: 对象名 = 类名() 对象调用类中普通方法: 对象名.方法名()
示例:
# 1.定义类 : class 类名(): 代码 class Person(): # 类中的方法其实就是一个函数 # 稍微有点特殊,形参第一个位置是self def study(self): print('学习Python使我快乐') # 2.根据类创建对象 : 对象名 = 类名() zs = Person() # 3.测试打印对象名效果: 0x:000001EW0UD73D90 16进制的地址 print(zs) # <__main__.Person object at 0x000001EE07D73D90> # 3.1 打印地址: id print(id(zs)) # 2561959411088 10进制的地址 # 4.对象调用类中的方法: 对象名.方法名() zs.study()
5.self含义
知识点:
self: 自我本身 位置: 类中普通方法形参的第一个位置 作用: 哪个对象调用该方法,self就代表哪个对象
示例:
# 1.定义类 : class 类名(): 代码 class Person(): # 类中的方法其实就是一个函数 # 稍微有点特殊,形参第一个位置是self # self: 哪个对象调用该方法,self就代表哪个对象 def study(self): # 5.打印self看下指向的是哪个对象? 调用该函数的对象 print('self:',self) print('Python使我快乐') # 2.根据类创建对象 : 对象名 = 类名() cx = Person() tw = Person() # 3.测试打印对象名效果: 0x:000001EE07D73D90 16进制的地址 print('cx:',cx) # <__main__.Person object at 0x000001EE07D73D90> print('tw:',tw) # __main__.Person object at 0x00000212BEBF00D0> # 4.对象调用类中的方法: 对象名.方法名() cx.study() tw.study()
6.在类外添加属性和获取属性
知识点:
在类外添加属性格式: 对象名.属性名 = 值 在类外获取属性格式: 对象名.属性名
示例:
# 1.定义类 class Person(): # 定义方法(本质就是一个函数) def study(self): print('学习python使我快乐') # 2.根据类创建对象,注意类名后的括号必须加上 zs = Person() # 类似出生,有了生命了 print(zs) # 2.1 给cx对象设置姓名属性 cx.name = '崔小' cx.age = 18 # 3.获取zs对象的姓名 print(f'姓名:{zs.name},年龄:{zs.age}') zs.study()
7.在类内获取属性
知识点:
在类内添加属性格式: self.属性名 = 值 一般都是和init魔法方法中配合使用 在类内获取属性格式: self.属性名
示例:
# 1.定义类 class Person(): # 定义方法(本质就是一个函数) # self带表当前对象cyy def study(self): # 类内获取属性: 建议用self在类内获取: self.属性名 # 此处age和name都报黄:提示你Person类中没有找到,不影响结果, # 稍后解决这个问题:在类内添加属性配合init魔法方法使用 print(f'{self.age}岁的{self.name}正在学习...') # 2.根据类创建对象,注意类名后的括号必须加上 cyy = Person() print(cyy) # 2.1 类外给zs对象设置姓名属性 cyy.name = '崔丫丫' cyy.age = 18 # 3.类外获取cx对象的姓名 # print(f'姓名:{cyy.name},年龄:{cyy.age}') cyy.study()
8.魔法方法
知识点:
书写: _ _方法名_ _(self): 代码... 执行: 自动调用不需要手动调用 常见的魔法方法: __init__方法: 执行时机: 创建对象的时候 对象名 = 类名() __str__方法: 执行时机: 打印对象的时候 print(对象名) __del__方法: 执行时机: 删除对象的时候 del 对象名 或者 程序正常结束的时候
9.魔法方法之init方法
知识点:
_ _init_ _魔法方法: 执行时机: 创建对象的时候自动调用 作用: 初始化对象(给对象的属性赋初始值)
示例:
# 1.定义类 class Person(): # 魔法方法init: 创建对象的时候自动调用 def __init__(self, name, age): # 在类内添加属性:self.属性名 = 值 self.name = name self.age = age # 2.1创建对象 cyy = Person('崔丫丫', 18) # 代码到此行会自动执行init魔法方法 # 3.1获取姓名和年龄 print(cyy.name, cyy.age) # 2.2创建对象 zs = Person('张三', 28) # 代码到此行会自动执行init魔法方法 # 3.2获取姓名和年龄 print(zs.name, zs.age)
10.魔法方法之str方法
知识点:
_ _str_ _魔法方法: 执行时机: 打印对象名的时候 作用: 默认打印对象名打印出来的地址,如果类中写了str方法,打印对象的时候打印的是str返回的字符串
示例:
# 1.定义类 class Person(): # 魔法方法init: 创建对象的时候自动调用 def __init__(self, name, age): # 在类内添加属性:self.属性名 = 值 self.name = name self.age = age # 魔法方法之str: 打印对象的时候自动调用 def __str__(self): # 必须返回字符串类型 return f'{self.name}的年龄是:{self.age}' # 2.1创建对象 cyy= Person('崔丫丫', 18) # 代码到此行会自动执行init魔法方法 # 3.1获取姓名和年龄 print(cyy) # 代码执行到此行会自动打印str方法返回的字符串 # 2.2创建对象 zs = Person('张三', 28) # 代码到此行会自动执行init魔法方法 # 3.2获取姓名和年龄 print(zs) # 代码执行到此行会自动打印str方法返回的字符串
11.魔法方法之del方法
知识点:
_ _del_ _魔法方法: 执行时机: 手动删除对象的时候,或者程序正常结束后 作用: 记录删除日志
示例:
演示手动删除指定对象情况:
# 1.定义类 class Person(): # 注意: 删除对象的时候执行或者程序正常结束的时候执行 # 记录了下删除日志 def __del__(self): print(f'{self}对象被删除了,del自动执行了') # 2.创建对象 cyy= Person() # 3.删除对象 print(cyy) del cyy # 删除对象的时候能够自动执行del魔法方法 print(cyy) # 此行报错 NameError: name 'cyy' is not defined print('我是程序的最后一行...')
演示程序正常结束删除所有对象情况:
# 1.定义类 class Person(): def __init__(self,name,age): self.name = name self.age = age # 注意: 删除对象的时候执行或者程序正常结束的时候执行 def __del__(self): print(f'{self.name}对象被删除了,del自动执行了') # 2.创建对象 zs = Person('张三',18) ls = Person('李四',28) print('我是程序的最后一行...') # 程序正常结束后del会自动执行
12.魔法方法综合练习
示例:
# 1.定义类 class Person(): # init初始化魔对象法方法 def __init__(self, name, age): print('init执行了...') self.name = name self.age = age # str返回字符串魔法方法 def __str__(self): return f'{self.name}的年龄:{self.age}' # del删除日志魔法方法 def __del__(self): print(f'{self.name}对象被删除了...') # 2.创建对象(默认自动执行init方法) cyy = Person('崔丫丫', 18) # 3.打印对象(默认自动执行str方法) print(cyy) # 4.1程序正常结束后del自动执行 # 4.2删除对象(默认自动执行del方法) del cyy
13.综合练习1
需求:
根据学生成绩0-100判断
(95分及以上优秀,80分及以上良好,75分及以上中等,60分及以上合格,60分以下不及格)
示例:
# 要求用面向对象的方式去解题 # 分析步骤: 类 属性 方法 # 类:学生类Student class Student(): # 属性: 姓名name 分数score def __init__(self, name, score): self.name = name self.score = score # 方法: 判断成绩的方法 grade() def grade(self): if self.score >= 0 and self.score <= 100: # 95分及以上优秀, if self.score >= 95: print(f'{self.name}的成绩{self.score}:优秀') # 80分及以上良好, elif self.score >= 80: print(f'{self.name}的成绩{self.score}:良好') # 75分及以上中等, elif self.score >= 75: print(f'{self.name}的成绩{self.score}:中等') # 60分及以上及格, elif self.score >= 60: print(f'{self.name}的成绩{self.score}:及格') # 60分以下不及格 else: print(f'{self.name}的成绩{self.score}:不及格') else: print('成绩有误!') # 创建学生对象传入姓名和分数 s = Student('崔丫丫',49) # 调用判断成绩的方法 s.grade()
14.减肥练习
需求:
崔丫丫体重55.0公斤,崔丫丫每次跑步会减掉0.50公斤,崔丫丫每次吃东西体重增加1公斤
示例:
# 崔丫丫体重75.0公斤,崔丫丫每次跑步会减掉0.50公斤,崔丫丫每次吃东西体重增加1公斤 # 分析步骤 类:Person 属性:姓名name 体重weight 方法: 跑步方法run() 吃东西方法eat() # 1.定义类 class Person(): # 属性:姓名name 体重weight def __init__(self, name, weight): self.name = name self.weight = weight # str方法打印对象的时候打印的是返回的字符串 def __str__(self): return f'姓名:{self.name},体重:{self.weight}公斤' # 方法: 跑步 1次 -0.5 def run(self): print(f'{self.name}跑步减掉0.50公斤') self.weight -= 0.5 # self.weight= self.weight-0.5 # 方法: 吃东西 def eat(self): print(f'{self.name}吃东西体重又增加1公斤...') self.weight += 1 # 2.创建对象 cyy = Person('崔丫丫', 55) print(xm) # 3.调用run方法 cyy.run() print(xm) # 4.调用eat方法 cyy.eat() print(xm)
15.定义类的3种方式
知识点:
python3.x版本之前: 旧式类 必须手动继承object类才是新式类 python3.x版本:默认都是新式类 pyhont3.x定义类默认都是继承了object类
示例:
class Student1(object): pass class Student2(): pass class Student3: pass # 创建对象类名后的括号是不能省略的!!! s1 = Student1() print(s1) s2 = Student2() print(s2) s3 = Student3() print(s3)
学习时间:
- 周一至周五晚上 9 点—晚上6点
- 周六上午 9 点-上午 11 点
- 周日下午 3 点-下午 6 点