zoukankan      html  css  js  c++  java
  • 记ABC类的bug

    监听模式中,建了模式父类
    
    class Observer(ABCMate):
    
        @abstractmethod
        def update(self,waterHeater):
            pass
    洗澡模式:
    class WashingMode(Observer):
        def update(self,waterHeater):
            if 50 < waterHeater.getTemperature() < 70:
                print('水烧好了,可以洗澡啦!')
    
    
    饮用模式:
    class DrinkingMode(Observer):
        def update(self,waterHeater):
            if waterHeater.getTemperature() >= 100:
                print('水烧开了,可以饮用了!')
    
    实例化对象调用时:
    
    
    waterHeater = WaterHeater()
    washing = WashingMode()
    drink = DrinkingMode()
    waterHeater.addObserver(washing,drink)
    waterHeater.setTemperature(60)
    waterHeater.setTemperature(120)
    
    
    报错:
    Traceback (most recent call last):
      File "E:/python设计模式/监听模式.py", line 52, in <module>
        washing = WashingMode()
    TypeError: __new__() missing 3 required positional arguments: 'name', 'bases', and 'namespace'
    
    
    将waterHeater传入后还报错:
        washing = WashingMode(waterHeater)
        drink = DrinkingMode(waterHeater)
    
    
    Traceback (most recent call last):
      File "E:/python设计模式/监听模式.py", line 52, in <module>
        washing = WashingMode(waterHeater)
    TypeError: __new__() missing 2 required positional arguments: 'bases' and 'namespace'
    
    所以去看ABCMate源码,发现ABC只是他的子类,用于更规范继承用的,而ABCMate类的__new__方法确实存在错误中的位置参数,百度无果,自己改为继承ABC类,将实例的waterHeater对象不传入washing和drink实例对象就好了,这里自己还没理解,所以记录下来,之后填坑。



    ###################################################

    哈哈哈,蠢哭了,自己又研究了一下,在继承
    ABCMate类的正确写法是:metaclass=ABCMate。ABC可以直接继承,原来ABC的源码里的注释意思是ABC可以像继承类一样直接写类名,而ABCMate类就得加上mateclass,恍然大悟啊,着实尴尬,看来以后看源码得多思考了,不能太肤浅。
    
    
    
    
  • 相关阅读:
    tmux 的基本使用
    ffmpeg(1) 基础框架
    VUE页面跳转方式
    nextcloud 中文乱码解决方案
    mysql8 navicat远程链接失败
    prometheus+grafana实现服务监控
    sqlalchemy ————关联表
    Python flask自定义异常信息,返回json格式的异常
    sqlalchemy 查询结果转json个人解决方案
    Linux添加字体
  • 原文地址:https://www.cnblogs.com/miaoweiye/p/12626101.html
Copyright © 2011-2022 走看看