面向对象编程(二)
动态方法与静态方法
1.绑定给对象的方法
面向对象三大特征之一:继承
"""
面向对象有三大特性 其中最重要的就是继承!!!
继承、封装、多态
"""
现实生活中继承是用来描述人与人之间资源的从属关系
eg:继承朕的江山 朕的所有资源你又可以使用
面向对象的继承是用来描述类与类之间资源(数据,功能...)的从属关系
eg:类A继承了类B 那么A可以使用B的所有资源(数据,功能...)
'''继承的目的就是合理偷懒!!!'''
继承可以减少代码冗余,提高开发效率
python支持直接多继承
'''
被继承的类称为:父类或基类 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()
"""
在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().__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}

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?