zoukankan      html  css  js  c++  java
  • 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. 这样比较专业, 而且错误比较明确.(推荐)

  • 相关阅读:
    二项队列
    左式堆
    优先级队列
    web.xml配置文件中<async-supported>true</async-supported>报错的解决方案
    Struts2中关于"There is no Action mapped for namespace / and action name"的总结
    spring四种依赖注入方式
    Spring @Resource、@Autowired、@Qualifier的注解注入及区别
    CXF自动生成客户端
    maven update 以后报错。
    Mavne + Spring整合CXF
  • 原文地址:https://www.cnblogs.com/chcj/p/9947208.html
Copyright © 2011-2022 走看看