黑马程序员技术交流社区
标题:
【上海校区】类的继承
[打印本页]
作者:
不二晨
时间:
2019-3-15 16:29
标题:
【上海校区】类的继承
一、什么是继承
1、继承
即允许基于一个现有的类作为起点定义新的类的一种技术
2、父类与子类
在面向对象的术语中,通常描述现有的类为基类(bass class)、父类(parent class)、或者超类(superclass)
基于现有类新定义的类为子类(subclass或childclass)
二、继承的方法
重写
子类提供一个覆盖现有方法的 新的实现方法,特化一个现有的行为
扩展
子类提供一些全新的方法扩展父类
下面以课程2.1中CreditCard类为父类,实现一个可以评估利息和费用的PredatoryCreditCard子类为例,说明重写和扩展的举例实现。
CreditCrad父类
class CreditCard:
def __init__(self,customer,bank,acnt,limit):
self._customer = customer #用户名,例如:'zhang san'
self._bank = bank #所属银行,例如:'招商银行’'
self._account = acnt #卡账号,例如:6222023200003451627
self._limit = limit #卡额度,例如:18000
self._balance = 0 #已用额度,例如:8500
def get_customer(self):
return self._customer
def get_bank(self):
return self._bank
def get_account(self):
return self._account
def get_limit(self):
return self._limit
def get_balance(self):
return self._balance
def charge(self,price):
if price + self._balance > self._limit:
return False
else:
sele._balance += price
return True
def make_payment(self,amount):
self._balance -= amount
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
PredatoryCreditCrad子类
class PredatoryCreditCrad(CreditCard):
'''由CreditCard类扩展的新类,提供了三个成员函数:__init__、charge和process_month
这些函数的主体,都依赖调用继承的构造函数来执行大部分初始化处理'''
def __init__(self,customer,bank,acnt,limit,apr):
'''调用继承构造函数的机制依赖于super()语法,调用父类中相对应的方法'''
super().__init__(customer,bank,acnt,limit) #调用从CreditCard父类继承的__init__方法
self._apr = apr #年利息
def charge(self,price):
'''重写了继承的charge方法:
当尝试收费,但由于信用卡额度不足而被拒绝时,收取5美元的费用'''
success = super().charge(price) #调用从CreditCard父类继承的charge方法
if not success:
self._balance += 5
return success #返回继承的charge方法的值给调用者,这样可使新的收费方法与原来的有类似的外部接口
def process_month(self):
'''拓展了一个新的process_month方法:
当有一个未清余额时,按月收取利息'''
if self._balance > 0:
monthly_factor = pow(1 + self._apr,1/12)
self._balance *= monthly_factor
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
三、一些其他概念
1、保护成员
一些面向对象的语言,允许声明的受保护或私有的访问模式
受保护的成员:可以访问子类,不能访问一般的公有类
私有的成员:既不能访问子类,也不能访问公有类
在python中不支持正式的访问控制,但通过名字格式可以区别
受保护的:以一个下划线开头的名字,被看作受保护的,如_balance
私有的:以双下划线开头的名字(除了特殊的方法),被看作私有的,如__xxx
---------------------
【转载,仅作分享,侵删】
作者:琪仔要转行回coder
来源:CSDN
原文:
https://blog.csdn.net/lllllaaa77/article/details/88412584
版权声明:本文为博主原创文章,转载请附上博文链接!
作者:
不二晨
时间:
2019-3-20 16:55
奈斯,感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2