python而言 面向对象编程属于重点中的重点 你现在觉得面向过程也能搞定 对是这样可以不使用面向对象编程
但是 面向对象编程可以高度整合你代码 牺牲可读性的同时增加了后期的易维护特性 随着你的进步你需要不断优化
你的程序设计 需要考虑代码的维护、可读性等各类因素
这些你看似可以不用的技术决定了你程序的高度和水平
score_dic = {'张三':0,'李四':100}
#创建一个学生类
class Student():
school_name = '家里蹲大学'
def __init__(self,name,age,id):
self.name = name
self.age = age
self.id = id
def check_score(self,name):#学生查成绩的方法
score =score_dic.get(name)
return score
@classmethod
def check_score_func(cls,name):
# 两个参数 cls、name 用类去调用默认会把类本身作为第一个参数传入
#用类去调用你只需要传name即可 这就是@classmethod的功劳 把这个方法定义为了'类方法'
#类专用的方法 而且享受vip服务也就是绑定方法特性自动传参数
result = score_dic.get(name)
return result
#一、通过对象调用属性
stu_obj = Student('张三',18,20201140)#实例化产生对象
score = stu_obj.check_score('张三')#对象调用查找成绩的方法 注意和下面的类调用对比看一下
print(score)
print(stu_obj.school_name)#调用属性直接点就可以
'''
对象调用方法check_score()这个方法需要两个参数self、name 你只需要传name
第一个参数self就是对象本身 在对象调用方法时有绑定方法这个特性所以会自动帮你传入
'''
#二、通过类直接调用类的属性
Student.check_score('李四')
#TypeError: check_score() missing 1 required positional argument: 'name'
#报错信息是啥 少一个参数 很显然缺少对象参数
Student.check_score(stu_obj,'李四')
#这个手动把对象作为第一个参数传入就不会有问题了
#所以总结一下这个类中定义的方法就是给vip用户用的 也就是提供给对象调用 类直接调用可以是可以但是没有vip服务
#当然也有一些手段可以给类提供vip服务 '@classmethed'这个东西就可以 继续往下看
score = Student.check_score_func('李四')
print(score)
'''
__init__方法内的属性是类独有的东西 比如学生他们都有姓名 年龄 学号
dtu_obj对象在调用类中的方法的时候 由于绑定方法的特性 默认会把对象作为第一个参数传入
所以类中的方法多数情况是给对象使用的 虽然类本身也可以使用 但是类在调用类中的属性时 不会有绑定的说法
需要几个参数你就要传几个参数 麻烦
@classmethod 定义为类方法 类可以直接调用 并且也有绑定特性 默认把类名作为第一个参数传入
对象的特性--多态(对象有多用属性 集于一身)、封装(高度整合代码)、继承(重用父类属性 减少代码重复)
多继承下的属性查找顺序 遵循mbr基类查找顺序
新式类:广度类(所有的父类分支都找一遍如果还没找到 最后再去找老祖宗)
经典类:深度查找(一条道查到黑 找不到再去其它分支找)
面向对象编程还有一部分内容这里就不说了 一定要研究
'''