python类的继承
2021-06-15 18:04
标签:ima font 成员 注册 log 多级 重写 构造 学生 面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”,继承的过程,就是从一般到特殊的过程。在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。 继承概念的实现方式主要有2类:实现继承、接口继承。 在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。 OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。 如果我们要给实例 c 传参,我们就要使用到构造函数,那么构造函数该如何继承,同时子类中又如何定义自己的属性? 继承类的构造方法: 1.经典类的写法: 父类名称.__init__(self,参数1,参数2,...) 2. 新式类的写法:super(子类,self).__init__(参数1,参数2,....) 如果我们只是简单的在子类Chinese中定义一个构造函数,其实就是在重构。这样子类就不能继承父类的属性了。所以我们在定义子类的构造函数时,要先继承再构造,这样我们也能获取父类的属性了。 子类构造函数基础父类构造函数过程如下: 实例化对象c ----> c 调用子类__init__() ---- > 子类__init__()继承父类__init__() ----- > 调用父类 __init__() 如果我们对基类/父类的方法需要修改,可以在子类中重构该方法。如下的talk()方法 来源:https://www.cnblogs.com/bigberg/p/7182741.html python类的继承 标签:ima font 成员 注册 log 多级 重写 构造 学生 原文地址:https://www.cnblogs.com/lantingg/p/9729079.html一、概述
二、类的继承
2.1 继承的定义
class
Person(
object
):
# 定义一个父类
def
talk(
self
):
# 父类中的方法
print
(
"person is talking...."
)
class
Chinese(Person):
# 定义一个子类, 继承Person类
def
walk(
self
):
# 在子类中定义其自身的方法
print
(
‘is walking...‘
)
c
=
Chinese()
c.talk()
# 调用继承的Person类的方法
c.walk()
# 调用本身的方法
# 输出
person
is
talking....
is
walking...
2.2 构造函数的继承
class
Person(
object
):
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
self
.weight
=
‘weight‘
def
talk(
self
):
print
(
"person is talking...."
)
class
Chinese(Person):
def
__init__(
self
, name, age, language):
# 先继承,在重构
Person.__init__(
self
, name, age)
#继承父类的构造方法,也可以写成:super(Chinese,self).__init__(name,age)
self
.language
=
language
# 定义类的本身属性
def
walk(
self
):
print
(
‘is walking...‘
)
class
American(Person):
pass
c
=
Chinese(
‘bigberg‘
,
22
,
‘Chinese‘
)
2.3 子类对父类方法的重写
class
Person(
object
):
def
__init__(
self
, name, age):
self
.name
=
name
self
.age
=
age
self
.weight
=
‘weight‘
def
talk(
self
):
print
(
"person is talking...."
)
class
Chinese(Person):
def
__init__(
self
, name, age, language):
Person.__init__(
self
, name, age)
self
.language
=
language
print
(
self
.name,
self
.age,
self
.weight,
self
.language)
def
talk(
self
):
# 子类 重构方法
print
(
‘%s is speaking chinese‘
%
self
.name)
def
walk(
self
):
print
(
‘is walking...‘
)
c
=
Chinese(
‘bigberg‘
,
22
,
‘Chinese‘
)
c.talk()
# 输出
bigberg
22
weight Chinese
bigberg
is
speaking chinese
三、类继承的事例
class
SchoolMember(
object
):
‘‘‘学习成员基类‘‘‘
member
=
0
def
__init__(
self
, name, age, sex):
self
.name
=
name
self
.age
=
age
self
.sex
=
sex
self
.enroll()
def
enroll(
self
):
‘注册‘
print
(
‘just enrolled a new school member [%s].‘
%
self
.name)
SchoolMember.member
+
=
1
def
tell(
self
):
print
(
‘----%s----‘
%
self
.name)
for
k, v
in
self
.__dict__.items():
print
(k, v)
print
(
‘----end-----‘
)
def
__del__(
self
):
print
(
‘开除了[%s]‘
%
self
.name)
SchoolMember.member
-
=
1
class
Teacher(SchoolMember):
‘教师‘
def
__init__(
self
, name, age, sex, salary, course):
SchoolMember.__init__(
self
, name, age, sex)
self
.salary
=
salary
self
.course
=
course
def
teaching(
self
):
print
(
‘Teacher [%s] is teaching [%s]‘
%
(
self
.name,
self
.course))
class
Student(SchoolMember):
‘学生‘
def
__init__(
self
, name, age, sex, course, tuition):
SchoolMember.__init__(
self
, name, age, sex)
self
.course
=
course
self
.tuition
=
tuition
self
.amount
=
0
def
pay_tuition(
self
, amount):
print
(
‘student [%s] has just paied [%s]‘
%
(
self
.name, amount))
self
.amount
+
=
amount
t1
=
Teacher(
‘Wusir‘
,
28
,
‘M‘
,
3000
,
‘python‘
)
t1.tell()
s1
=
Student(
‘haitao‘
,
38
,
‘M‘
,
‘python‘
,
30000
)
s1.tell()
s2
=
Student(
‘lichuang‘
,
12
,
‘M‘
,
‘python‘
,
11000
)
print
(SchoolMember.member)
del
s2
print
(SchoolMember.member)
# 输出
-
-
-
-
end
-
-
-
-
-
just enrolled a new school member [haitao].
-
-
-
-
haitao
-
-
-
-
age
38
sex M
name haitao
amount
0
course python
tuition
30000
-
-
-
-
end
-
-
-
-
-
just enrolled a new school member [lichuang].
3
开除了[lichuang]
2
开除了[Wusir]
开除了[haitao]
下一篇:python (一)