Python面向对象的基础学习
目录
面向对象的基本认知
(1)面向过程和面向对象
Python的学习一般分为两个编程思想:
一个是面向过程,面向过程是将要实现的功能分为多个步骤(即函数),依次完成这些步骤然后整合到一起,完成目标
另一个是面向对象,面向对象是通过多个实体发出的动作(即属性)来实现需要的功能,使用时进行调用对应的实体
面向过程的核心思想 -- 自顶向下,逐步细化
面向对象的核心思想 -- 实现使用时先得到对应主体(封装的函数),再使用主体去实现功能
重点:二者的相同点和区别:
相同点:二者都可以实现代码的重用和模块化编程
区别:
面向对象的优势 -- 数据更封闭和安全,模块化更深,思维更贴近日常生活,更有逻辑性,在维护和扩展的角度,要比面向过程简单
面向过程的优势 -- 只关注前期开发的角度,比面向对象简单,代码执行效率更高
(2)面向对象的基本概念
对象
对象(object)-- 现实任务中的一个动作实体就对应着一个对象
对象使用属性(property)保存数据
对象使用方法(method)管理数据
类
类的概念
类(class)用于生产对象,规定着对象的属性和方法,先有类才有对象
类是具有相似或相同属性和动作的一组实体的集合,是对现实世界的模拟;一个对象的特征信息一般都是由所属的类所决定的,但每个对象又可以具有不同的特征信息
类的定义
Python中有两种类的定义方式(按自己喜欢的方式写,都可以使用)
Python2(经典类)
class 类名:Python3(新式类)
class 类名(object):注意类名遵循一般的标识符命名规则,一般为了与方法名区分,类名首字母大写
基本语法
class Person(object): #方法 def eat(self): print("吃饭") def drink(self): print("喝水")
类的实例化
基本语法
对象名 = 类名()实例化和调用对象
代码:
class Person(object): #方法 def eat(self): print("吃饭") def drink(self): print("喝水") f1 = Person() f1.eat() f1.drink() f2 = Person() f2.drink()效果如下:
f1和f2就是实例化的对象,后面就是对方法的调用
self关键字
self指向类实例化的对象本身,即谁实例化了对象,self就是谁
代码:
class Person(object): def speak(self): print(self) print("hello world") f1 = Person() print(f1) f1.speak() f2 = Person() print(f2) f2.speak()效果如下:
可以看到f1和f2的地址不同,实例化后打印self的值会随着实例化对象的改变而改变
(3)对象属性的添加与获取
对象一般由两部分组成:属性+方法
属性的添加
对象名.属性 = 属性值前面我们可以知道self关键词指向实例化对象,那么可以在方法中直接用关键字指代对象从而添加属性
代码:
class Person(object): def speak(self): print(f'我的名字是{self.name},今年{self.age}岁了') f1 = Person() f1.name = '张三' f1.age = '20' f1.speak()效果如下:
这里我们可以看到,要是想设置属性需要一个一个对应输入很繁琐,如何直接用实例化对象去设置属性呢,这就要用到魔术方法了
(4)魔术方法
魔术方法是具有特殊功能的函数
它们都有自己的触发条件
__init__()方法
__init__() -- 作为实例化对象时,会自动触发并调用,用于初始化方法或构造方法
代码:
class Person(object): def __init__(self,name,age): self.name = name self.age = age f1 = Person('李四', 55) print(f"我的名字是{f1.name},今年{f1.age}岁了")效果如下:
注意形参中要有对应的属性名
__str__()方法
定义了__str__()后,可直接用于返回输出的数据,用return的方式
代码:
class Person(object): def __init__(self,name,age): self.name = name self.age = age def __str__(self): return f"我的名字是{self.name},今年{self.age}岁了" f1 = Person('王五', 22) print(f1)效果如下:
注意return返回的是字符串类型的数据
__del__()方法
既然有构造对象的方法__init__,就会有删除对象的方法,就是__del__,当调用该方法时,会自动删除对象
代码:
class Person(object): def __init__(self,name,age): self.name = name self.age = age def __del__(self): print(f"{self}对象已被删除") f1 = Person('王五', 22) print(f1) del f1 print(f1)效果如下:
从报错信息中可以看到f1对象已经被删除无法被找到
扩展:__name__的使用场景
当__name__被当成程序正常运行时,__name__属性被设置为字符串‘__main__’,作为主函数使用;
当__name__被当成模块导入时,__name__被设置为模块的名称被新的场景引用
当然还有很多魔法方法,感兴趣的可以自己上网搜索学习,这里只介绍多数情况下会使用到的几个魔术方法
(5)基础练习
接下来是对这节内容的一个综合练习,可以根据要求自己练习一下
要求:定义一个学生类,需要包含学生的姓名和成绩的属性,定义一个打印学生成绩的方法
(90分及以上显示优秀,80分及以上显示良好,70分及以上显示中等,60分及以上显示合格,60分以下显示不及格),成绩打印完后删除该对象
参考代码:
class Student(): def __init__(self, name, score): self.name = name self.score = score def __str__(self): if not (0 <= self.score <= 100): return f"学生{self.name}的成绩无效" if self.score >= 90: return f"学生姓名:{self.name}, 成绩:{self.score}, 优秀" elif self.score >= 80: return f"学生姓名:{self.name}, 成绩:{self.score}, 良好" elif self.score >= 70: return f"学生姓名:{self.name}, 成绩:{self.score}, 中等" elif self.score >= 60: return f"学生姓名:{self.name}, 成绩:{self.score}, 及格" else: return f"学生的姓名是{self.name}, 成绩:{self.score}, 不及格" def __del__(self): print(f"\n学生{self.name}的对象已删除") if __name__ == '__main__': f1 = Student("Tom", 85) f2 = Student("Alice", 99) f3 = Student("Jack", 65) f4 = Student("Bob", 52) f5 = Student("Lily", -2) print(f1) print(f2) print(f3) print(f4) print(f5)效果如下:
更多推荐









所有评论(0)