python day19

一.类的约束

一个项目中不同模块交由不同的程序员来完成,每个功能得必须先定义好,如避免功能代码实现后却执行不了.

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. 这样比较专业, 而且错误比较明确.(推荐)

原文地址:https://www.cnblogs.com/chcj/p/9947208.html