python继承怎么写_python 继承

本文详细介绍了Python中的继承概念,包括继承的作用、分类、新式类与经典类的区别,以及单继承和多继承的工作原理。通过实例展示了如何创建派生属性和方法,如何调用父类的属性和方法,以及super()函数的使用。同时讨论了新式类和经典类在调用顺序上的差异,并提到了组合与继承的选择问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介

1、作用

简化代码

2、分类

一个父类可以被多个多个子类继承

一个子类可以继承多个父类---python独有

3、新式类和经典类

python3中,只含义新式类,新式类默认继承Object

python2.7中含义经典类和新式类,新式类需要继承Object

4、方法

类名.__base__查看该类的继承顺序

类.mro(),返回类的调用顺序

classA:print('A')classB(A):print('B')classC(A):print('C')classD(B, C):print('D')print(D.__bases__) #(, )

print(D.mro()) #[, , , , ]

二、单继承

1、派生

派生属性:在子类中,创建父类中没有的属性

派生方法:在子类中,创建父类中没有的方法

2、顺序

1)子类对象的调用顺序

子类属性、方法,若没有到父类的属性、方法,若没有到Object,若没有,则报错

2)调用父类

1)通过子类对象调用,若子类有同名方法,会调用子类的方法

2)通过父类名直接调用父类

3)使用super(类名, 已定义的对象名).类方法名

3、用父类的属性、方法

1)父类名.__init__(self, 父类的其它属性)

2)super().__init__(父类的其它属性)

4、super()

super()方法只在python3中存在

在类内部可以不写()内的类名和对象名

super()的本质:不是单纯找父类,而是根据调用者的节点位置的广度优先顺序来的

classPerson:def __init__(self, name, sex, age):

self.name=name

self.sex=sex

self.age=agedefintroduce(self):print('父类方法', self.name)classStudent(Person):def __init__(self, name, sex, age, grade):

Person.__init__(self, name, sex, age) #通过父类直接调用__init__方法

self.grade = grade #派生属性

def gr(self): #派生方法

print(self.grade)classWorker(Person):def __init__(self, name, sex, age, money):

super(Worker, self).__init__(name, sex, age) #Worker, self 可以不写

self.money = money #派生属性

def make(self): #派生方法

print(self.money)

s1= Student('tom', 'man', 24, 99)

s1.gr()#99

print(s1.name) #tom

s1.introduce() #父类方法 tom, 调用父类方法,若子类有同名方法,会调用子类的方法

Person.introduce(s1) #调用父类方法

super(Student, s1).introduce() #调用父类方法

三、多继承

1、一个子类继承多个父类

2、调用顺序

默认是就近原则

新式类:广度优先

经典类:深度优先

3、新式类

1)钻石继承

classD:print('D')classB(D):print('B')classC(D):print('D')classA(B, C):print('A')

2)

3)

4、经典类

深度优先,一条路走到黑

ps:组合和继承怎么抉择?

组合:什么有什么

继承:什么是什么

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值