前言
我们知道python是面向对象的编程 C语言是面向过程的编程 那这两个有什么区别呀
先讲简单的面向过程 比如说和女孩子交往 就是我注重和你在一起的过程 我们带你做一些事情如逛街 看电影等这一套子直接下来 但是因为我还不是很了解你所以每次和你出来我都是一条龙的这一套子 这个过程有很多冗余的内容
但是面向对象 就是我先了解你的爱好(属性) 再和你一起去逛街 看电影 而不是我直接带你出来做上边这一套事情 面向对象就是指定一个计划书再去做一些事情
简单点说就是简单的过程注重过程是好的繁琐的事情面向过程就显得很复杂 而面向对象就很游刃有余
面向对象的例题
先写一个例题了解一下 然后再分析出 面向对象的特征
:定义猫的名字 年龄并打印出来
是不是想的是 cat1="xiaomao1" age=2 然后再print
那我让你写100猫的名字和年龄 是不是 你每次都需要重新定义 再输出啊
而面向对象就是 我把名字 年龄 和 打印都定义好了 你直接使用
演示 :
class Cat #这个就是定义一个类
def __init__(self,name,year) # init 就类似于假设你有的属性 猫有什么属性 不就是名字和 年龄
#给与预名字值就是我们输入的
self.name=name
self.year=year
这个就是一个属性的定义 那我们接着是需要去打印名字的 那就需要我们定义一个方法
#接上
def echo_name(self)
print(f"{self.name}")
# f""进行格式化
这样一个类就定义好了 再进行实例化一个方法 我们都叫这个上边的叫预名字就是 这个类是虚拟的 需要我们定义一个真实的名字取实例化他
cat1=Cat("小灰")
cat1.echo_name()
这样就可以进行输出了 如果还有别的猫 我们就能接着调用执行 如果有学过php的面向对象的就知道 python的这个是非常简介的
这其实就已经学了面向对象的第一个特点 封装性 把我们的预名字和id进行封装 __init__ 就是他完成的
面向对象的练习题
# 定义一个学生 学生需要有 1、姓名 学号 语数英三个的成绩‘ 2、设置学生的成绩 3、打印
那我们分析一下先 需要定义类是什么呀 是学生 学生有什么?name id crouse score 这三个
然后 这里有个细节就是 前两个是我们给的 第三个应该是初始化的状态 ???=》因为第二步才是设置成绩呀 然后第二步 我们输入学科成绩(这个可以定义为一个输出学科和成绩的方法) 第三部打印(这个也搞为方法)
来吧搞
class Student:
def __init__(self,name,id)
self.name = name
self.id = id
self.score = {"数学":"0","语文":"0","英语":"0"} #以一个字典去初始化成绩
def shuchu(self,course,score)
if course in self.score: #判断你写的学科在不在里边
self.score[course]=score #如果在就使用字典的替换功能
print
def echo_zong(self)
print(f"学生{self.name}的成绩如下")
for course in self.score:
print(f"学科:{course},成绩:{self.score[course]}") #当然这{self.score[course]} 也可以换成这个{score}
zhangsan=Student(zhangsan,10010)
zhangsan.shuchu("语文","90")
zhangsan.echo_zong()
运行
这边还有个知识点就是 哎呀你使用if太逊了 使用一下 try这个高级的东西啊
程序的异常错误处理
try是什么? 这个我称之为最强预判函数 外加程序员对用户出气的好方法
他的作用就是这个地方你输入的是错误的 我给你提示 不让程序报错而终止 如果正常就执行
演示一下:
try :
user_weight=float(input("啊输入你的体重:"))
except ValueError :
print("让你输体重你输你******的字符啊")
else: #用户的输入完全正确之后执行什么
print(f"你的体重是{user_weight}kg")
finally: #前边不论错误与否 都会执行
print("程序结束")
执行
try 就想到于if
except 后边可以什么也不写 当然如果你知道是什么错误就可以写
没有错误执行 else
finally 就是不管程序错误与否都会执行
那我们就改一下上边的if
是不是感觉自己飞升了呀
类的继承
继承是指把一个类定义好的类给另一个类
有人可能问继承有什么用呢?举个例子 假设有大学生和小学生 这两个类 这两个类有相同的 属性 姓名 id 等 那我不就可以定义一个父类当他们来继承 这样不就免去了再重写一遍的烦恼呀
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
class Dastudent(Student): #定义大学生并给与父类说明
def __init__(self, name, age):
super().__init__(name, age) #使用super表示上边的属性我继承以下内容
def echo(self):
print(self.name, self.age)
class Xiaostudent(Student):
def __init__(self, name, age):
super().__init__(name, age)
def echo(self):
print(self.name, self.age)
xiaoming=Xiaostudent("xiaoming", 10)
xiaoming.echo()
最后输出
练习题:
# from tkinter.font import names # 父类继承 super.__init__ # 练习 :人力系统 员工分为 全职 兼职 全职兼职都有 姓名 工号 # 全职 有月薪 # 兼职有日薪 每天工作数 work_days # 全职兼职都有 计算月薪 但计算过程不一样
class Employee:
def __init__(self, name, id):
self.name = name
self.id = id
def print_info(self):
print(f"姓名:{self.name},工号:{self.id}")
class Full(Employee):
def __init__(self, name, id, monthly_salary):
super().__init__(name, id)
self.monthly_salary = monthly_salary
def calculate_salary(self):
return self.monthly_salary
class Parttime(Employee):
def __init__(self, name, id, monthly_salary, work_days):
super().__init__(name, id) # 初始化自己的姓名和编号 如果不初始化的话 这个姓名和id就会直接默认继承
self.work_days = work_days
self.monthly_salary = monthly_salary
zhangsan = Full("张三", "1001","6000")
lisi=Parttime("李四","1002","500","10")
zhangsan.print_info()
zhangsan.calculate_salary()
print(zhangsan.monthly_salary);
总结
以上就是类的学习的笔记,我认为因为python的面向对象性 这个类的学习还是比较重要的