首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么assert不能在抽象类中工作?

为什么assert不能在抽象类中工作?
EN

Stack Overflow用户
提问于 2019-12-13 22:36:08
回答 1查看 132关注 0票数 1

我需要你的帮助来理解为什么assert不能在我的代码中工作(我正在使用这段代码来学习抽象类,getters和setters),我是一个抽象类的新手。

如果我在power属性中设置了一个负数,代码应该停止并显示一个警告,但是assert会忽略power是负数、零还是非负数。

另一个测试代码在基类中没有具体的方法,但在子类中有相同的具体方法代码停止并给我一个警告。

下面是我要测试的完整代码。

代码语言:javascript
复制
from abc import ABC, abstractmethod

class Load(ABC):
    #That's a class to create load to circuits.
    @abstractmethod
    def __init__(self, power=0, power_factor=1):
        self.__power = power
        self.__power_factor = power_factor

    # the attributte name and the method name must be  same
    # which is used to set the value for the attributte
    @property
    def power(self):
        return self.__power

    @power.setter
    def power(self, power):
        # AT TEST SHOULD STOP HERE ANY CONDITION - ONLY TEST PURPOSEs
        # BUT HERE ASSERT IS IGNORED
        assert (power < 0), "power must be non-negative"
        assert (power >= 0), "***power must be negative - ONLY TEST"
        self.__power = power

    @property
    def power_factor(self):
        return self.__power_factor

    @power_factor.setter
    def power_factor(self, power_factor):
        assert 0 < power_factor <= 1, "power factor must be greater 0 until 1"
        self.__power_factor = power_factor


class Specific(Load):
    def __init__(self, power, power_factor):
        super().__init__(power, power_factor)
    # the attributte name and the method name must be  same
    # which is used to set the value for the attributte

### ONLY TESTs PURPOSE

a = Specific(-11,1) # TO FORCE THE ERROR
print(a.power, a.power_factor)
a.power_factor = .4
print(a.power, a.power_factor)

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2019-12-13 22:40:56

你没有使用你的setter -你直接赋值给你的支持字段。

使用

代码语言:javascript
复制
class Load(ABC):
    #That's a class to create load to circuits.
    @abstractmethod
    def __init__(self, power=0, power_factor=1):
        self.power = power                          # acutally use the setter, do not
        self.power_factor = power_factor            # set the backing field directly...

所以你的setter会检查这些值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59324660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档