面向对象编程(二)
2022/4/7 20:19:17
本文主要是介绍面向对象编程(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
面向对象编程(二)
动态方法与静态方法
# 动态方法(有两种,绑定给对象的方法和绑定给类的方法) 1.绑定给对象的方法 # # 1.绑定给对象的方法 # class Student: # def chiose_class(self): # print(self) # Student.chiose_class(123) # 类调用函数有几个参数就传几个参数 # obj1 = Student() # obj1.chiose_class() # 对象调用会将对象本身当做第一个参数传入 # >>>123 # >>><__main__.Student object at 0x014EC4F0> # # 2.绑定给类的方法 # class Student: # @classmethod # def chiose_class(cls): # print(cls) # Student.chiose_class() # 类调用函数时会将类本身当做第一个参数传入 # obj1 = Student() # obj1.chiose_class() # 对象调用是会将产生对象的类当做第一个参数传入 # # 静态方法 # class Student: # @staticmethod # def chiose_class(a): # print(a) # Student.chiose_class(123) # obj1 = Student() # obj1.chiose_class(123) # 无论类调用还是对象调用都要传指定数量的参数 # >>>123 # >>>123
面向对象三大特征之一:继承
""" 面向对象有三大特性 其中最重要的就是继承!!! 继承、封装、多态 """ # 继承的含义 现实生活中继承是用来描述人与人之间资源的从属关系 eg:继承朕的江山 朕的所有资源你又可以使用 面向对象的继承是用来描述类与类之间资源(数据,功能...)的从属关系 eg:类A继承了类B 那么A可以使用B的所有资源(数据,功能...) # 继承的目的 '''继承的目的就是合理偷懒!!!''' 继承可以减少代码冗余,提高开发效率 python支持直接多继承 # 继承的基本使用 # class A: # name_A = 'name from A' # def num_A(self): # print('A') # # class B: # name_B = 'name from B' # def num_B(self): # print('B') # # class C(A,B): # 定义类C,继承类A,类B # name_C = 'name from C' # def num_C(self): # print('C') # # obj1 = C() # print(obj1.name_A) # C实例化的对象可以直接调用A,B类中的数据和方法 # obj1.num_B() # >>>name from A # >>>B ''' 被继承的类称为:父类或基类 A,B 继承别人的类称为:子类或派生类 C '''
继承的本质
抽象:由下往上抽取相同特征 继承:由上往下直接白嫖资源 """ 在面向对象编程中 其实类和父类的主要功能都是用来减少代码冗余的 对象:数据与功能的结合体 类:多个对象相同数据和功能的结合体 父类:多个类相同数据和功能的结合体 """ class Person: # 人类,存放人共有的属性 def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender class Teacher(Person): # 老师类,继承人类,这里写老师角色独有的属性 teacher_id = '123456789' # 老师特有数据,教师号 def teacher(self): # 老师特有的教书功能 print(self) class Student(Person): # 学生类,继承人类,这里写学生角色独有的属性 study_id = '987654321' # 学生特有数据,学生号 def study(self): # 学生特有的学习功能 print(self)
名字的查找顺序
# 不继承的情况下 先从对象自己的名称空间找,没有再去类的名称空间找 对象>>>类 '''注意设置值的情况下是在自身的名称空间中添加或者修改数据''' # 单继承的情况下 先从自己的名称空间找,没有去对象生成类的名称空间,再没有去父类名称空间,并且如果父类有父类一直往复找下去!!! 对象>>>类>>>父类>>>父类的父类 '''根据血缘关系,由近及远''' 经典案例 class A: def f1(self): print('from A.f1') def f2(self): print('from A.f2') self.f1() '''以后看到self点东西 一定要问自己self是谁''' class MyClass(A): def f1(self): print('from MyClass.f1') obj = MyClass() obj.f2() # 执行的方法分别是A里面的f2和MyClass里面的f1 # 多继承的情况下(了解) """ 在python2中存在经典类与新式类 在python3中只有新式类 区分的关键在于是否继承了一个默认的object类 新式类:直接或者间接继承了object或者其子类的类 经典类:不继承任何的类 """ 强度:研究菱形和非菱形问题object不参与图形构建 非菱形继承的情况下 父类中名字的查找顺序就是按照继承时从左往右依次查找 如果多个父类还有分类 那么遵循"深度优先" 菱形继承的情况下 父类中名字的查找顺序就是按照继承时从左往右依次查找 如果多个父类还有分类 那么遵循"广度优先" ############################################# '''名字的查找顺序永远都是 先从当前对象自身开始查找''' #############################################
派生类
派生类关键字'super' eg: class Person: # 人类,存放人共有的属性 def __init__(self,name,age,gender): self.name = name self.age = age self.gender = gender class Teacher(Person): # 老师类,继承人类,这里写老师角色独有的属性 def __init__(self,name,age,gender,teacher_id): # super(Teacher,self).__init__(name,age,gender) # 子类调用父类的方法 完整语法 super().__init__(name,age,gender) # 子类调用父类的方法 精简语法 self.teacher_id = teacher_id # 老师特有数据,教师号 def teacher(self): # 老师特有的教书功能 print(self) class Student(Person): # 学生类,继承人类,这里写学生角色独有的属性 def __init__(self,name,age,gender,study_id): super().__init__(name,age,gender) self.study_id = study_id # 学生特有数据,学生号 def study(self): # 学生特有的学习功能 print(self) """ 如果自己写的子类需要使用父类的方法 并且还需要基于该方法做扩展 这样的子类我们称之为派生类(本质还是子类) 那么可以使用super关键字来实现 """ obj1 = Teacher('petter',20,'male','123456789') print(obj1.__dict__) 运行结果: {'name': 'petter', 'age': 20, 'gender': 'male', 'teacher_id': '123456789'}
派生功能前瞻
class MyDictClass(dict): def update(self,d): super(MyDictClass, self).update(d) obj2 = MyDictClass() obj2.update({'name':'petter','age':18}) print(obj2) 运行结果: {'name': 'petter', 'age': 18}
这篇关于面向对象编程(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10百万架构师第十三课:源码分析:Spring 源码分析:Spring核心IOC容器及依赖注入原理|JavaGuide
- 2025-01-10便捷好用的电商API工具合集
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀