摘自https://www.cnblogs.com/evablogs/p/6724477.html
继承
1
2
3
4
5
6
7
8
|
class
Person(
object
):
def
__init__(
self
, name, gender):
self
.name
=
name
self
.gender
=
gender
class
Student(Person):
def
__init__(
self
, name, gender,score):
#score属性是子类自己的属性
super
(Student,
self
).__init__(name,gender)
#super(子类名称,self).__init__(继承父类的属性1,属性2):初始化父类,继承Person父类的name和gender属性
self
.score
=
score
|
除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。
多重继承的目的是从两种继承树中分别选择并继承出子类,以便组合功能使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#哪类人
class
Person(
object
):
pass
class
Student(Person):
pass
class
Teacher(Person):
pass
class
SkillMixin(
object
):
pass
#技能类
class
BasketballMixin(SkillMixin):
def
skill(
self
):
return
'basketball'
class
FootballMixin(SkillMixin):
def
skill(
self
):
return
'football'
#拥有哪种技能的人的类型
class
BStudent(Student, BasketballMixin):
#既是学生,又会打篮球的人,即继承学生类,也继承篮球技能类,多重继承
pass
class
FTeacher(Teacher, FootballMixin):
pass
s
=
BStudent()
print
s.skill()
>>> basketball
t
=
FTeacher()
print
t.skill()
>>> football
|
多态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
class
Person(
object
):
def
__init__(
self
,name):
self
.name
=
name
def
a(
self
):
#Person父类的a方法
return
'I am a Person,my name is %s'
%
self
.name
class
Student(Person):
def
__init__(
self
,name,age):
super
(Student,
self
).__init__(name)
self
.age
=
age
def
a(
self
):
#Student子类的a方法
return
'I am a Student,my name is %s'
%
self
.name
class
Teacher(Person):
def
__init__(
self
,name,score):
super
(Teacher,
self
).__init__(name)
self
.score
=
score
def
a(
self
):
#Teacher子类的a方法
return
'I am a Teacher,my name is %s'
%
self
.name
def
show_a(x):
#定义一个方法,用于接收x参数,返回每个类实例对象相对应的方法
print
a()
p
=
Person(
'Bob'
)
s
=
Student(
'Alice'
,
12
)
t
=
Teacher(
'Lily'
,
80
)
结果:
>>> show_a(p)
I am a Person,my name
is
Bob
>>> show_a(s)
I am a Student,my name
is
Alice
>>> show_a(t)
I am a Teacher,my name
is
Lily
结果返回子类自己的方法,但当子类的方法找不到时会顺着子类找到父类相对应的方法
|
封装
将细节封装起来提供一个接口被访问,有效地保证了细节的安全。
1
2
3
4
5
6
7
8
9
|
class
Person(
object
):
def
__init__(
self
):
self
.__name
=
'a'
@property
#使用@property将一个方法name变成属性,可以直接.name访问
def
name(
self
):
#封装self.__name属性
return
self
.__name
p1
=
Person()
p1.name
#p1.name可以直接访问name方法
|