一.类的约束
一个项目中不同模块交由不同的程序员来完成,每个功能得必须先定义好,如避免功能代码实现后却执行不了.
class Normal: # 张三, 普通⼈登录
def login(self):
pass
class Member: # 李四, 会员登录
def denglu(self):
pass
class Admin: # 王五, 管理员登录
def login (self):
pass
# 项目经理写的总⼊⼝
def login(obj):
print("准备验证码.......")
obj.login()
print("进⼊入主⻚页.......")
'''
对于张三和王五的代码. 没有问题. 但是李四的. 你是不是调用不了. 那如何避免这样的
问题呢? 我们要约束程序的结构. 也就是说. 在分配任务之前就应该把功能定义好. 然后分别
交给底下的程序员来完成相应的功能.
'''
在python中有两种办法来解决这样的问题:
1. 提取父类. 然后在父类中定义好方法. 在这个方法中什么都不用干. 就抛⼀个异常就可以了. 这样所有的子类都必须重写这个方法. 否则. 访问的时候就会报错.
class Biaozhun:
def login(self):
raise Exception('缺少login功能')
class Normal(Biaozhun):
def login(self):
print('普通登录')
class Gaoji(Biaozhun):
def denglu(self):
print('高级登录')
class NB(Biaozhun):
def login(self):
print('NB登录')
#项目经理写的总⼊⼝
def test(s):
s.login()
t1=Normal()
test(t1) #普通登录
t2=Gaoji()
test(t2) #报错
'''
t2=Gaoji()
t2.login()#报错并抛出异常: raise Exception('缺少login功能')
因为Gaoji类里没有login,所以使用的是继承了Biaozhun类里的 login,所以显示出 '缺少login功能'
'''
2. 使用元类来描述父类. 在元类中给出⼀个抽象方法. 这样子类就不得不给出抽象方法的具体实现. 也可以起到约束的效果.
总结: 约束. 其实就是⽗类对子类进⾏行约束. 子类必须要写xxx方法. 在python中约束的方式和方法有两种:
1. 使用抽象类和抽象方法, 由于该方案来源是java和c#. 所以使用频率还是很少的
2. 使用⼈为抛出异常的方案. 并且尽量抛出的是NotImplementError. 这样比较专业, 而且错误比较明确.(推荐)