Justin-刘清政的博客

python/面向对象进阶/2-类的派生

2020-12-21

一、派生

  • 派生:子类中新定义的属性的这个过程叫做派生,并且需要记住子类在使用派生的属性时始终以自己的为准

90-类的派生-基因遗传.jpg

1.1 派生方法一(类调用)

  • 指名道姓访问某一个类的函数:该方式与继承无关
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
class OldboyPeople:
"""由于学生和老师都是人,因此人都有姓名、年龄、性别"""
school = 'oldboy'

def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender


class OldboyStudent(OldboyPeople):
"""由于学生类没有独自的__init__()方法,因此不需要声明继承父类的__init__()方法,会自动继承"""

def choose_course(self):
print('%s is choosing course' % self.name)


class OldboyTeacher(OldboyPeople):
"""由于老师类有独自的__init__()方法,因此需要声明继承父类的__init__()"""

def __init__(self, name, age, gender, level):
OldboyPeople.__init__(self, name, age, gender)
self.level = level # 派生

def score(self, stu_obj, num):
print('%s is scoring' % self.name)
stu_obj.score = num


stu1 = OldboyStudent('tank', 18, 'male')
tea1 = OldboyTeacher('lqz', 18, 'male', 10)
1
print(stu1.__dict__)
1
{'name': 'tank', 'age': 18, 'gender': 'male'}
1
print(tea1.__dict__)
1
{'name': 'lqz', 'age': 18, 'gender': 'male', 'level': 10}

1.2 派生方法二(super)

  • 严格以来继承属性查找关系
  • super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承的关系)
  • super().init(不用为self传值)
  • super的完整用法是super(自己的类名,self),在python2中需要写完整,而python3中可以简写为super()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class OldboyPeople:
school = 'oldboy'

def __init__(self, name, age, sex):
self.name = name
self.age = age
self.sex = sex


class OldboyStudent(OldboyPeople):
def __init__(self, name, age, sex, stu_id):
# OldboyPeople.__init__(self,name,age,sex)
# super(OldboyStudent, self).__init__(name, age, sex)
super().__init__(name, age, sex)
self.stu_id = stu_id

def choose_course(self):
print('%s is choosing course' % self.name)


stu1 = OldboyStudent('tank', 19, 'male', 1)
1
print(stu1.__dict__)
1
{'name': 'tank', 'age': 19, 'sex': 'male', 'stu_id': 1}
使用支付宝打赏
使用微信打赏

点击上方按钮,请我喝杯咖啡!

扫描二维码,分享此文章