继承
什么是继承?
'''比如人类和猫类都继承自动物类'''
个体继承自父母,继承了父母的一部分特征,但也可以有自己的个性
在面向对象的世界中,从父类继承,就可以直接拥有父类的属性和方法,这样可以减少代码,多复用
为什么要用继承?
类解决了对象与对象之间的代码冗余问题
继承解决了类与类之间的代码冗余问题
怎么使用继承?
经典类:没有继承object类的子子孙孙类都是经典类
新式类:继承了object类的子子孙孙类都是新式类
class Animal():
def __init__(self,name):
self._name=name
def shut(self):
print('shut %s'%self.__class__.__name__)
@property
def name(self):
return self._name
a=Animal('monkey')
a.shut()
class Cat(Animal):
pass
cat=Cat('dog')
print(cat.name)
class parent1():
pass
class parent2():
pass
class sub1(parent1):
pass
class sub2(parent1,parent2):
pass
class People():
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print(self.name, self.age)
class Student(People):
def __init__(self, name, age, stu_nu):
People.__init__(self,name, age)
self.stu_nu = stu_nu
class Teacher(People):
def __init__(self, name, age, level):
'''
#子类里面调用父类的init方法
注意下面这行代码是指明道姓的调用父类
'''
People.__init__(self,name, age)
self.level = level
stu = Student('张三', 20, 1001)
stu.info()
print(stu.name)
print(stu.age)
tea = Teacher('王五', 34, '教授')
tea.info()
print(tea.name)
print(tea.level)
print(stu.name,stu.age,stu.stu_nu)
print(tea.name,tea.age,tea.level)
单继承下的属性查找
单继承下的属性查找:先从对象自己名称空间中查找,然后去产生这个对象的类中查找,最后去继承的父类中查找
多继承下的属性查找
多继承下分菱形查找喝非菱形查找
菱形查找分 经典类喝新式类
经典类:按照深度优先的查找顺序查找
新式类:按照广度优先查找
super和mro的使用
class Student(People):
def __init__(self, name, age, stu_nu):
super().__init__(name, age)
self.stu_nu = stu_nu
stu = Student('张三', 20, 1001)
stu.info()
每个类都有自己的mro列表,怎么查看mro列表
stu = Student('张三', 20, 1001)
stu.info()
print(Student.__mro__)
多态和鸭子类型
多态它是面向对象的三大特征
什么是多态?
同一种事物的多种形态
举例:
水:气态水,液态水,固态水
比如下面这个例子:
'''狗和猫都继承了动物类,但是他们都有一个共同的特征就是吃
但是下面又定义了人类,人类也又吃这个动作,我们不需要关心Person是什么对象,只需要关心Person是否有吃的方法,不关心类型'''
class Animal():
def eat(self):
print('动物要吃东西')
class Dog(Animal):
def eat(self):
print('狗吃肉')
class Cat(Animal):
def eat(self):
print('猫吃骨头')
class Person():
def eat(self):
print('人吃五谷杂粮')
def fun(obj):
obj.eat()
fun(Cat())
fun(Dog())
fun(Person())
抽象类和普通类有什么区别?
抽象类只能够被继承,不能被实例化
'鸭子类型'
'''鸭子类型就是更多的关注的是对象的行为,而不是对象的类型'''
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)